使用文件描述符将char指针映射到内存中文件

时间:2014-04-28 17:50:05

标签: c++ c

我尝试使用fmemopen将char *映射到内存中的FILE *。 我刚刚发现fmemopen不会给我一个文件描述符。 有没有办法用FD获取内存中的文件?

char * data = ... data ...;
FILE *fid = fmemopen(data, 172, "r");

int fd =  fileno(fid);
if(fd < 0)
    std::cout << "BAD" << std::endl;
else
    std::cout << "GOOD" << std::endl;

2 个答案:

答案 0 :(得分:3)

查看shm_open()fdopen()一起做你想做的事。

#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
    FILE *f = NULL;
    int fd = 0, n = 0;
    char buffer[6] = "hello";

    fd = shm_open("myfile", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
    if(fd<0) {
       printf("failed to shm_open\n");
       exit(1);
    }
    f = fdopen(fd,"w+");
    if(!f) {
       printf("failed to fdopen\n");
       exit(1);
    }
    n = fwrite(buffer, sizeof(char), sizeof(buffer), f);
    printf("wrote %d bytes", n);
    fclose(f);
}

答案 1 :(得分:0)

fopen基于open 系统调用,因此具有相应的文件描述符。

另一方面,

fmemopen是纯实现,不需要系统文件描述符。另请参阅fileno上的NOTES部分。