首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中获取filedescriptor时出现问题

在c++中获取filedescriptor时出现问题
EN

Stack Overflow用户
提问于 2011-05-02 20:22:41
回答 3查看 1.1K关注 0票数 1

我在将文件映射到内存时遇到了问题。不知何故,我无法获取Filedescriptor。这就是我想要做的:

代码语言:javascript
复制
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:错误:上下文信息不足,无法确定类型

EN

回答 3

Stack Overflow用户

发布于 2011-05-02 20:28:53

如果您所说的fstream指的是std::fstream,则不支持文件描述符,也不支持名为open()的静态或非成员函数。

票数 1
EN

Stack Overflow用户

发布于 2011-05-02 20:44:38

代码语言:javascript
复制
 fstream::flags = O_RDONLY

并不意味着什么。

如果您想使用只读文件流,请使用ifstream而不是fstream

票数 1
EN

Stack Overflow用户

发布于 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;}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5857075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档