0

可能重复:
如何获取内存中缓冲区的文件描述符?

我试图强制使用FILE类的库使用内存中的缓冲区而不是文件。fmemopen但是,我尝试了该库使用fileno它返回 -1 并导致库崩溃。所以我读到我需要一个文件描述符,我可以使用管道命令来制作一个。我不完全明白我做了什么,但我让它工作了。但是,我不知道我所做的是否真的安全。所以这里是代码:

int fstr[2];
pipe(fstr);
write(fstr[1], src, strlen(src));
close(fstr[1]);
FILE* file = fdopen( fstr[0], "r" );

那么这安全吗?

4

2 回答 2

2

改为使用fmemopen(3)。此功能已经为您方便地写入/读取内存缓冲区。

于 2013-01-02T21:11:15.447 回答
1

如果你真的需要一个文件句柄,这和我能想到的一样好。

您可能遇到的一个可能问题是管道的缓冲区大小是有限的。如果您的字符串大于缓冲区大小,write(...)则管道将阻塞,直到某些数据read(...)来自另一端。

理想情况下,您将有一个工作线程写入管道,但如果这不可能/太难,您可以通过fcntl(fd, F_SETPIPE_SZ, ...).

于 2013-01-02T21:38:31.427 回答