Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MinGW没有fopencookie或fmemopen吗?_C_Windows_Stream_Mingw - Fatal编程技术网

MinGW没有fopencookie或fmemopen吗?

MinGW没有fopencookie或fmemopen吗?,c,windows,stream,mingw,C,Windows,Stream,Mingw,我可以用什么来编写自定义流呢?fmemopen是POSIX,但不是C标准的一部分fopencookie不是任何标准的一部分;这是一个GNU函数 tmpfile是fmemopen的一个很好的便携式替代品。这些函数几乎相同,只是tmpfile速度较慢,需要fread才能将数据取回 一般来说,如果您可能需要输出到文件以外的其他地方,最好不要编写接受文件*的代码,而是支持自定义输出回调或其他功能。您可以使用sprintf或asprintfI,您的意思是snprintfsprintf不应该被使用。难道不是

我可以用什么来编写自定义流呢?

fmemopen
是POSIX,但不是C标准的一部分
fopencookie
不是任何标准的一部分;这是一个GNU函数

tmpfile
fmemopen
的一个很好的便携式替代品。这些函数几乎相同,只是
tmpfile
速度较慢,需要
fread
才能将数据取回


一般来说,如果您可能需要输出到文件以外的其他地方,最好不要编写接受
文件*
的代码,而是支持自定义输出回调或其他功能。

您可以使用sprintf或asprintfI,您的意思是
snprintf
sprintf
不应该被使用。难道不是
tmpfile
在硬盘上创建了一个物理文件吗?BTW.是不是在<代码>文件> /COD>上建立的C++流?就普通C而言, TMPFrase>代码不需要创建物理文件,因为一致程序不能观察它是否真的存在。对于POSIX,存在
fileno
函数可以获取底层文件描述符,因此必须存在一个描述符。但是文件是匿名的,而且没有理由关心它是不是除了性能之外创建的。至于C++流,它们不是直接建立在STDIO上的。我不知道C++,但是我的理解是,基于STDIO和非STDIO的流都存在,使用相同的基类,但不同的派生类。“对于POSIX,Fielo函数的存在使得有可能得到底层文件描述符,所以必须存在。”从Linux上的man页面FMEOPENT(3);“没有与这些函数返回的文件流相关联的文件描述符(即,如果对返回的流调用,fileno(3)将返回一个错误)。”从我对fopencookie(3)的测试来看,似乎同样的启发式适用,尽管手册页中没有记录;如果对fopencookie(3)返回的文件指针调用fileno(3),它将返回-1,errno将显示9“错误的文件描述符”。@abasterfield:在
tmpfile
的情况下,确实需要关联的文件。看见特别是“tmpfile()函数将创建一个临时文件并打开一个相应的流”(在这里,除了POSIX的含义外,我看不到任何读取“文件”的方法)和“该文件将在fopen()中打开以进行更新(w+)”(这意味着一个真实的文件)<代码>文件否仅允许没有基础文件的stdio流失败。