控制台程序的管道重定向
来源:互联网 发布:手机txt编辑软件 编辑:程序博客网 时间:2024/05/22 03:11
(1) 写一个add.exe文件,代码如下
#include "iostream"using namespace std;int main(){int a, b;while(cin>>a>>b){cout<<a+b<<endl;}return 0;}编译生成add.exe,在步骤3中会用到
(2)写一个输入文件in.txt,写入数据,
格式为每行仅有两个整数,两个整数之间用空格隔开
数据可以有多行
最后一行只有一个空字符(Tab键上面的键)
例:
2 5
45 65
1 -88
·
(3)
新建一个win32 console application空工程,再新建一个main.cpp文件,写入以下代码,编译生成相应的exe文件,
将(1)、(2)中的文件拷贝到工程main.cpp所在的目录当中和工程目录下Debug目录当中
#include "windows.h"#include "iostream"using namespace std;HANDLE hRead,hWrite,dWrite,dRead;DWORD WINAPI ThreadRead(LPVOID lpParameter) //读取线程{DWORD dw=-1;char temp[4096];while(dw != 0){ memset(temp,0,4096);ReadFile(hRead,temp,4096,&dw,0);if(dw!=0){cout<<temp;}}return 0;}void Read(){HANDLE handle = CreateThread(NULL, 0, ThreadRead, NULL, 0, NULL); //创建读取线程if(! handle){MessageBox(NULL,"创建线程失败","Tip",0);return ;}CloseHandle(handle);}int main(int argc, char * argv[]){DWORD ErrorCode;DWORD dw=-1; HANDLE hFile;OFSTRUCT FileInfo;char ErrorString[500];SECURITY_ATTRIBUTES sa; //创建安全信息结构体sa.bInheritHandle=true;sa.lpSecurityDescriptor=0;sa.nLength=sizeof(sa);CreatePipe(&hRead,&hWrite,&sa,4096); //创建输出管道if(ErrorCode = GetLastError()){cout<<"创建输入管道失败!"<<endl;FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, LANG_SYSTEM_DEFAULT, ErrorString, 500, NULL);cout<<ErrorString<<endl;return 1;}CreatePipe(&dRead,&dWrite,&sa,4096); //创建输入管道if(ErrorCode = GetLastError()){cout<<"创建输出管道失败!"<<endl;FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, LANG_SYSTEM_DEFAULT, ErrorString, 500, NULL);cout<<ErrorString<<endl;return 2;} hFile = (HANDLE)OpenFile("in.txt", &FileInfo, OF_READ);if(ErrorCode = GetLastError()){cout<<"打开输入文件失败!"<<endl;FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, LANG_SYSTEM_DEFAULT, ErrorString, 500, NULL);cout<<ErrorString<<endl;return 1;}STARTUPINFO si; //创建进程开始信息结构体GetStartupInfo(&si);si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;si.wShowWindow = SW_HIDE; si.hStdOutput = hWrite;si.hStdInput = dRead;PROCESS_INFORMATION pi; //创建进程CreateProcess("add.exe", NULL, NULL, NULL, true, 0, NULL, NULL, &si, &pi);if(ErrorCode = GetLastError()){cout<<"创建进程失败!"<<endl;FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, LANG_SYSTEM_DEFAULT, ErrorString, 500, NULL);cout<<ErrorString<<endl;return 3;}char data[4096];memset(data, 0, sizeof(data));ReadFile(hFile, data, 4096, &dw, 0);WriteFile(dWrite, data, strlen(data), &dw, NULL);Read();return 0;}注意:如果是映射CMD的命令,则要在每个命令字符串后追加一个换行符 ‘\n’
(4)完成以上的步骤就可以执行了,(3)中的程序就是重新定向(1)中的add.exe的输入和输出
- 控制台程序的管道重定向
- 利用管道实现控制台程序输入输出的重定向
- 利用管道实现控制台程序输入输出的重定向
- Delphi中利用管道重定向实现对控制台(Console)程序的操作
- 重定向控制台程序的输入输出
- 巧用管道实现程序的输入输出重定向
- 控制台程序的标准输入输出的重定向
- 控制台程序的标准输入输出的重定向
- 控制台程序的标准句柄的重定向
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- QT里重定向另外一个控制台程序的输出
- 重定向子进程控制台程序的输入输出
- Createprocess控制台程序输出重定向
- Createprocess控制台程序输出重定向
- unhandled exception in:0xC0000005:Acess Violation
- Non-terminating decimal expansion; no exact representable decimal result.
- PLSQL高效设计之exists和in
- ManualResetEvent
- 分层Pane结构与Swing组件高级特性的实现
- 控制台程序的管道重定向
- MongoDB学习笔记(一) MongoDB介绍及安装
- 指针的应用(zlg)
- 在centos防火墙内禁止某IP的访问
- selector 的 问题
- 解决无法定位程序输入点 _Z17qt_message_output9QtMsgTypePKc 于动态链接QtCore4.dll库上
- build path--use as source folder
- C语言面试题总汇
- 怎样sleep单独的线程