我在将文件映射到内存时遇到问题。我不知道怎么得不到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:错误:没有足够的上下文信息来确定类型
答案 0 :(得分:1)
如果你用fstream表示std::fstream
,则不支持文件描述符,也不支持名为open()
的静态或非成员函数。
答案 1 :(得分:1)
fstream::flags = O_RDONLY
没有任何意义。
如果您想使用只读文件流,请使用ifstream
代替fstream
。
答案 2 :(得分:0)
好的,我发现我自己的open()和close()实现引起了冲突。我将它们重命名为mapopen()和mapclose(),现在它的工作原理如下:
char * Logfile :: mapopen(){
// get file size struct stat st; stat(name.c_str(), &st); size = st.st_size; // get file descriptor file_descriptor = open(name.c_str(), O_RDONLY);
// open(name.c_str(),0_RDONLY); if(file_descriptor&lt; 0){ cerr&lt;&lt; “获取文件描述符时出错:”&lt;&lt; name.c_str()&lt;&lt; ENDL; 返回NULL; }
// memory map part start = (char*) mmap(NULL, size, PROT_READ, MAP_SHARED,
file_descriptor,0); if(start == NULL){ cerr&lt;&lt; “错误内存映射文件\ n”; 关闭(类file_descriptor); 返回NULL; }
return start; }