在c ++中获取filedescriptor的问题

时间:2011-05-02 12:22:41

标签: c++ fstream

我在将文件映射到内存时遇到问题。我不知道怎么得不到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:错误:没有足够的上下文信息来确定类型

3 个答案:

答案 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; }