使用c ++进行管道处理

时间:2009-09-14 02:28:51

标签: c++

我终于找到了如何让stdin和stdout在主应用程序和用CreateProcess(win32)或exec(linux)创建的进程之间进行管道连接。现在我有兴趣利用应用程序的管道性质。我正在运行的应用程序可以通过管道输入:

eg: cat file.txt | grep "a"

如果我想运行“grep”,将“file.txt”的内容发送给它(我在c ++应用程序的缓冲区中),我该怎么做?我想我不只是把它压低了stdin,或者我错了。那就是我做的吗?

1 个答案:

答案 0 :(得分:1)

是的,这正是您所做的:从stdin读取并写信至stdout

Linux背后的天才之一是,只要您的应用遵循一些非常简单的基本规则,几乎可以轻松地重定向输入和输出。例如:将数据发送到stdout,将错误或信息性消息发送到stderr。这使得用户可以轻松跟踪状态,您仍然可以使用您的应用程序将数据发送到管道。

您还可以单独重定向数据(来自stdout)和消息(来自stderr):

myapp | tail -n 5 > myapp.data # Save the last 5 lines, display msgs
myapp 2> myapp.err | sort      # Sort the output, send msgs to a file
myapp 2> /dev/null             # Throw msgs away, display output
myapp > myapp.out 2>&1         # Send all output (incl. msgs) to a file

重定向起初可能有点令人困惑,但你会发现花在学习上的时间非常值得!