您的位置:首页 > 其它

cmd命令的管道重定向

2011-07-19 09:42 183 查看
#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,4095,&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;
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;
}

STARTUPINFO si;        //创建进程开始信息结构体
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWrite;
si.hStdInput = dRead;

PROCESS_INFORMATION pi;     //创建进程

CreateProcess(NULL, "cmd.exe", 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[100];

while(1)
{
gets(data);
if(strcmp(data,"cls")==0)
{
system("cls");
continue;
}
strcat(data,"\n");
fflush(stdin);
WriteFile(dWrite, data, strlen(data), &dw, NULL);
Read();

if(strcmp(data,"exit")==0)
return 0;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: