C 将内存映射到文件描述符的系统调用(逆mmap)?
我希望能够将内存映射到文件描述符,以便可以使用一些需要文件描述符的现有函数。以下是我想要的:C 将内存映射到文件描述符的系统调用(逆mmap)?,c,unix,posix,mmap,system-calls,C,Unix,Posix,Mmap,System Calls,我希望能够将内存映射到文件描述符,以便可以使用一些需要文件描述符的现有函数。以下是我想要的: void do_operation1(int fd); char data[DATA_MAX] = { /* embedded binary data */ }; int fd = addr_to_fd(data, DATA_MAX); do_operation1(fd); /* ... operate on fd ... */ 我可以使用什么系统调用来完成此任务?某些实现具有fmemopen()
void do_operation1(int fd);
char data[DATA_MAX] = { /* embedded binary data */ };
int fd = addr_to_fd(data, DATA_MAX);
do_operation1(fd);
/* ... operate on fd ... */
我可以使用什么系统调用来完成此任务?某些实现具有
fmemopen()
。(当然,您必须调用fileno()
)
如果没有,您可以使用
fork()
和pipe()
自己构建它。您应该查看shm_open()
当然,只需打开(argv[0],…)
,扫描文件以找到二进制数据的起始位置,lseek()
,然后完成。该文件当然没有二进制数据的长度。当文件*
来自fmemopen
或类似文件时,fileno()
在Linux/FreeBSD(我认为其他)上都会失败。如果无法获取文件描述符,我不确定我们是否有解决方案。fmemopen
也可以在BSD上使用funopen
实现。fork()中提供了一个实现。
对于这一目的来说相当重要。我建议用线代替。使用select()
在从管道读取和写入之间进行多路复用会更好,但我想这不是一个选项。这不起作用,因为fmemopen()
只创建一个由给定内存缓冲区支持的文件*
。没有创建文件描述符。