管道重定向符“|”
来源:互联网 发布:数据透视表汇总 编辑:程序博客网 时间:2024/04/28 18:17
在 cmd.exe 的命令行模式下,管道重定向符“|”用于把一个命令的输出传递给另一个程序,比如,在查看一个比较长的文件时,需要把 type 命令的结果分页显示,这时候就需要把它重定向到 more 命令,如:
type somefile.txt | more
管道重定向符“|”的实质作用是把 type 的输出结果发送给 more 进程的标准输入句柄(STD_INPUT_HANDLE),more 进程则不断读取这个句柄的内容,并将读出的内容计算后分页输出。
下面的示例代码 DbgPrint 示范了如何使用 STD_INPUT_HANDLE。
// DbgPrint.cpp
#include 〈Windows.h〉
#include 〈tchar.h〉
int main(void)
{
HANDLE hPipe = GetStdHandle(STD_INPUT_HANDLE);
CHAR str[1024];
DWORD dwRead;
BOOL b;
do
{
ZeroMemory(str, sizeof(str));
b = ReadFile(hPipe, str, sizeof(str), &dwRead, NULL);
if (b && dwRead 〉 0)
OutputDebugStringA(str);
} while (b && dwRead 〉 0);
return 0;
}
代码编译完成后,可以在命令行中输入:
dir | DbgPrint
这样将会使 dir 的结果重定向到 DbgPrint 的标准输入句柄中,也就是由 OutputDebugStringA 来输出。
最后说一句,最初我尝试在 do-while 中使用 ReadConsoleA 来获取管道输出,但是什么也得不到,而 ReadFile 则工作正常。查了一下 MSDN ,其中对 GetStdHandle 的解释有这么一句:
These handles can be used by the ReadFile and WriteFile functions, or by any of the console functions that access the console input buffer or a screen buffer (for example, the ReadConsoleInput, WriteConsole, or GetConsoleScreenBufferInfo functions).
如此看来,由 GetStdHandle 返回的句柄应该是不支持 ReadConsole 的。不过,我并没有再测试 ReadConsoleInput ,有兴趣的朋友们可以自己测试一下。
- 管道重定向符“|”
- 管道重定向符“|”
- 管道符、重定向
- linux重定向操作符 ( 管道命令 ):|、>、>> 、<、>&、<&
- Linux学习---重定向和管道符
- 管道符,重定向和环境变量
- 【Linux】管道命令符、重定向、环境变量
- linux中的管道符与重定向
- 管道重定向
- 重定向与管道
- 重定向 与 管道
- 管道和重定向
- linux重定向、管道
- 管道与重定向
- 重定向与管道
- 重定向和管道
- 管道和重定向
- 管道和重定向
- Win32控件的使用
- SQL2005:This machine does not have a product that matches this installation package.
- Creating and changing a production order from ABAP FUNCTION 'CLOI_CHANGES_UPL_31'
- 使用异步 I/O 大大提高应用程序的性能
- 从C语言到FPGA高手,我是怎么炼成的?
- 管道重定向符“|”
- C# using作用透析 三种用法不用愁
- Apache CXF 学习笔记
- Symbian多线程编程
- GPL和LGPL协议
- 用AfxExtractSubString()解析复合串 【转】
- 重定向输入和输出
- 好久没有上来写过东西了
- 对于Tekkaman completion 的一点疑问?? 没有 解决