利用管道重定向标准输入输出流
2015-01-21 11:01
387 查看
应用程序默认标准输出流是stdout、stdin、stderror,stdout的默认操作是送到终端显示出来,windows系统下我们可以修改者已默认行为,将应用程序的输出重定向到一个管道内,这样我们可以在进程内调用其他进程时进行输入输出操作。代码如下:
<span style="white-space:pre"> </span>SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hRead,&hWrite,&sa,0)) { return FALSE; } STARTUPINFO si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; //把创建进程的标准错误输出重定向到管道输入 si.hStdOutput = hWrite; //把创建进程的标准输出重定向到管道输入 si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //关键步骤,CreateProcess函数参数意义请查阅MSDN //openssl rsautl -decrypt -in hello.en -inkey private.key -out hello.de //openssl rsautl -encrypt -in hello.txt -inkey public.key -pubin -out hello.en if (!CreateProcess(L"openssl.exe", L"openssl rsautl -decrypt -in hello.en -inkey private.key -out hello.de",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { CloseHandle(hWrite); CloseHandle(hRead); return FALSE; } CloseHandle(hWrite); char buffer[4096] = {0}; //用4K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。 DWORD bytesRead; while (true) { if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL) break; } CloseHandle(hRead); return true;
相关文章推荐
- Java ,如何用标准的输入输出流重定向到一个文件
- 08_I/O输入输出流、文件重定向、格式控制、标准输入输出、 串流类、 文件操作、多线程
- Java重定向标准输入输出流I/O(理解)
- shell标准输入输出流的重定向问题
- APUE-3.1 测试能否对标准输入设置偏移量(测试stdin,重定向文件,管道,FIFO)
- Linux下输入输出流错误流 & 重定向 & 管道
- freopen()——重定向标准输入输出流
- freopen()——重定向标准输入输出流
- 利用重定向标准输入输出,从键盘输入并写入新建的文件中
- Java 重定向标准输入输出流
- Python使用管道(pipe)协同标准输入输出流使程序通信
- Java中标准输入输出流的重定向
- 利用Object 的输入输出流,从文件中读取多个对象
- C#下写GUI - 管道操作 - 读取标准输出流 - 截获shell程序输出
- 重踏学习Java路上_Day22(数据操作流,内存操作流,打印流,标准输入输出流,随机访问流,合并流,序列化流,Properties,NIO)
- c++ 标准输入输出流基础
- 利用FFmpeg和管道(pipe),解决非URL和非文件的输入形式
- Shell的输入和输出(echo,read,cat,管道,tee,重定向等)
- 基础学习:控制台接收输入字符与重定向输出流实现程序日志两例子的编程
- Linux教程-标准输入/输出和重定向