我在将文件映射到内存时遇到了问题。不知何故,我无法获取Filedescriptor。这就是我想要做的:
char* Logfile::open(){
// get file size
struct stat st;
stat(name.c_str(), &st);
size = st.st_size;
// get file descriptor
file_descriptor = fstream::open(name.c_str(), fstream::flags = O_RDONLY); //open(name.c_str(), 0_RDONLY);
if(file_descriptor < 0){
cerr << "Error obtaining file descriptor for: " << name.c_str() << endl;
return NULL;
}
// memory map part
start = (char*) mmap(NULL, size, PROT_READ, MAP_SHARED, file_descriptor, 0);
if(start == NULL){
cerr << "Error memory-mapping the file\n";
//close(file_descriptor);
return NULL;
}
return start;
}编译器一直告诉我:
../src/Logfile.cpp:在成员函数‘char*Logfile::open()’中:../src/Logfile.cpp:31:错误:上下文信息不足,无法确定类型
发布于 2011-05-02 20:28:53
如果您所说的fstream指的是std::fstream,则不支持文件描述符,也不支持名为open()的静态或非成员函数。
发布于 2011-05-02 20:44:38
fstream::flags = O_RDONLY并不意味着什么。
如果您想使用只读文件流,请使用ifstream而不是fstream。
发布于 2011-05-02 21:51:01
好吧,我发现我自己的open()和close()实现引起了冲突。我将它们重命名为mapopen()和mapclose(),现在它是这样工作的:
char*日志文件::mapopen(){
//获取文件大小struct stat st;stat(name.c_str(),&st);size = st.st_size;//获取文件描述符file_descriptor = open(name.c_str(),O_RDONLY);
//open( name.c_str(),0_RDONLY);if(file_descriptor < 0){ cerr <<“获取文件描述符时出错:”<< name.c_str() << endl;return NULL;}
//内存映射部分start =(字符*) mmap(NULL,size,PROT_READ,MAP_SHARED,
file_descriptor,0);if(start == NULL){ cerr <<“内存映射文件时出错\n”;close(file_descriptor);return NULL;}
return start;}
https://stackoverflow.com/questions/5857075
复制相似问题