我终于找到了如何让stdin和stdout在主应用程序和用CreateProcess(win32)或exec(linux)创建的进程之间进行管道连接。现在我有兴趣利用应用程序的管道性质。我正在运行的应用程序可以通过管道输入:
eg: cat file.txt | grep "a"
如果我想运行“grep”,将“file.txt”的内容发送给它(我在c ++应用程序的缓冲区中),我该怎么做?我想我不只是把它压低了stdin,或者我错了。那就是我做的吗?
答案 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
重定向起初可能有点令人困惑,但你会发现花在学习上的时间非常值得!