我通过open_memstream()创建一个流,填充然后读取。它工作正常。但我很困惑,函数文档说:“open_memstream()函数打开一个用于写入缓冲区的流”。但我也可以读它。我是否以正确的方式使用它?也许我可以读取流因为我的平台中的功能实现允许这样做?当我改变平台时,我可能会收到错误。
答案 0 :(得分:5)
但我也可以阅读。我是否以正确的方式使用它?
不,不是真的。 Posix指定open_memstream()仅用于输出。你只应该写信给它。您可以访问数据 你通过open_memstream()创建的缓冲区写入,但不是用fread(),fgets()或类似的。
如果您想要一个可以阅读的流,请使用fmemopen()。
也许我可以读取流,因为我的平台中的功能实现允许这样做?
是的,它可能是实现的一个功能,允许您从FILE *中读取,检查其文档。
答案 1 :(得分:0)
完成nos's answer:
POSIX 7说http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream.html
该流应开放供写作,并且可以寻找。
所以没有阅读,只写作。
您无法在POSIX中更改打开文件描述符的flags
:Reopen a file descriptor with another access?
Linux显然有一个/proc/self/fd/n
解决方法。