【发布时间】:2014-03-23 11:18:34
【问题描述】:
如果我想将字节数据通过管道传输到 Linux 上的 C/C++ 程序,如下所示:
cat my_file | ./my_app
但是:
- 我们不能假设管道数据将来自文件
- 我们希望将数据解释为文件中的字节(而不是字符串)
从 C/C++ 应用程序中读取管道的最快技术是什么?
我做了一点研究,发现:
read()std::cin.read()-
popen()
但我不确定是否有更好的方法,或者上述哪种方法更好。
编辑:对此有性能要求,因此我要求使用开销最小的技术。
【问题讨论】:
-
注意
popen()不会从管道中读取任何内容,而只会为您提供可用于调用read()的必要文件描述符。 -
不是
popen()。在 C 中,使用read();在 C++ 中,可能再次使用read(),但使用std::cin也可以。 -
你为什么要关心性能?在 shell 中使用
|并从std::cin读取将相当不错,灵活且健壮。 -
仅供参考,
cat my_file | ./my_app比./my_app <file慢,而且灵活性较差(您会得到一个无法打开seek()的描述符)。为什么要这样指定? -
@CharlesDuffy 只是我的误解,有两种方法,一种更快......