我希望能够将内存映射到文件描述符,以便我可以使用一些需要文件描述符的现有函数。这里是我正在寻找的东西:将内存映射到文件描述符(反向mmap)的系统调用?
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 ... */
我可以用什么系统调用或调用来完成此操作?
事实证明,当'FILE *'来自'fmemopen'或其他等价物时,'fileno()'在Linux/FreeBSD(以及其他人)上都失败。如果没有获取文件描述符的方法,我不确定我们是否有解决方案。 – 2010-05-21 06:08:31
'fmemopen'也可以使用BSD上的'funopen'来实现。一个实现可以在https://redmine.openinfosecfoundation.org/attachments/105/0001-fmemopen-wrapper-added-fix-compilation-problems-on-m.patch – 2010-05-21 06:09:31
'fork()'是相当重的这个目的。我建议使用线程来代替。使用'select()'来更好地在管道的读写之间进行多路复用,但我想这不是一个选项。 – Sven 2010-09-01 08:40:32