2009-09-14 111 views
0

我终于弄清楚如何获得标准输入和标准输出到主应用程序和使用CreateProcess(win32)或exec(linux)创建的进程之间的管道。现在我对利用应用程序的管道特性感兴趣。我正在应用程序可以通过管道输送到:管道使用C++处理

eg: cat file.txt | grep "a" 

如果我想运行的“grep”,送“file.txt的”给它的内容(我在我的C++应用程序的缓冲区),我该怎么做呢?我假设我不只是把它抽掉,或者我错了。那是我做的吗?

+0

为了提高效率和一般的巧妙,跳过“猫”并重定向grep的stdin从文件中读取:grep“a” 2009-09-14 02:47:53

回答

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 

重定向可能在第一有点混乱,但你会发现所花的时间学习将是非常值得它!