【发布时间】:2014-01-27 16:31:36
【问题描述】:
我想将数据从一个流复制到另一个。现在通常,我会这样做:
n = fread(buffer, 1, bufsize, fin);
fwrite(buffer, 1, n, fout);
有没有办法直接将数据从fin写入fout,不经过缓冲区,即代替fin->buffer->fout,我想直接做fin->fout(无缓冲区)。
在 ANSI C 中可以这样做吗?如果没有,是否可以使用 POSIX 函数来实现?还是特定于 Linux 的解决方案?
【问题讨论】:
-
我不这么认为,因为 AFAIK freopen() 只能破坏输入或输出流,但似乎无法将输入连接到输出。
-
它是 Linux 并且 /output 实际上是一个命名管道 - 但我不知道如何解决问题。
-
某个进程将数据写入我程序的标准输入。我的程序的工作是建立一个命名管道并将该数据放入命名管道。
-
“某个进程”不知道命名管道的名字,我的程序的工作就是找一个空闲的名字,设置管道等等。
-
事实上我的程序做的不止这些——它还决定是使用管道还是使用另一个接口。这当然不是多余的;-)