c++ - 使用文件描述符将字符指针映射到内存中的文件

标签 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;

最佳答案

看看 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);
}

关于c++ - 使用文件描述符将字符指针映射到内存中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23347877/

相关文章:

c - 分配给指针时从不兼容的指针类型警告中初始化

c++ - Getline 只读取第一行(或第一行)

c++ - 用于集群的 C/C++ 机器学习库

使用 kiss_fft 将复杂频率转换为实际信号

c - 没有 TLS 符号的库给出错误 : dlopen: cannot load any more object with static TLS

c++ - 宽限期内的 OCILogon - ORA-28002

c++ - C++中的鼠标点击位置

C++ - undefined symbol 链接器错误 - Xcode

c++ - 所有变量是否都根据它们在程序中声明的顺序连续存储?

c - 确定设置了字节中的哪一位