-
大小: 265KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-07
- 語言: 其他
- 標(biāo)簽:
資源簡介
雙管道(CreatePipe)與cmd.exe進(jìn)程間通信的有關(guān)問題 完美解決代碼 ,發(fā)布啦

代碼片段和文件信息
//?controlDOS.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?
#include?
#define?SEND_BUFF_SIZE?1024
//實現(xiàn)去除執(zhí)行結(jié)果中的?命令字符串+“\n“
void?print(char?*cmdstr)
{
while(*((char*)cmdstr++)!=‘\n‘);
printf(cmdstr);
}
int?main()
{
HANDLE?hReadPipe1hWritePipe1hReadPipe2hWritePipe2;?//四個HANDLE?用來創(chuàng)建兩個管道
CHAR?Buff[SEND_BUFF_SIZE]?=?{0};
????CHAR?sendBuff[SEND_BUFF_SIZE]?=?(“dir?\n“);
//安全屬性的東西
????SECURITY_ATTRIBUTES?sa;
????sa.nLength=sizeof(sa);
????sa.lpSecurityDescriptor=0;
????sa.bInheritHandle=true;????
????int?ret;
????if(!CreatePipe(&hReadPipe1&hWritePipe1&sa0))//創(chuàng)建兩個匿名管道???導(dǎo)向DOS輸入輸出通道
????{
????????return?-1;
????}
????if(!CreatePipe(&hReadPipe2&hWritePipe2&sa0))
????{
????????return?-1;
????}
//啟動信息
????STARTUPINFO?si;
????ZeroMemory(&sisizeof(si));
????//GetStartupInfo(&si);
????si.dwFlags?=?STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
????si.wShowWindow?=?SW_HIDE;
????si.hStdInput?=?hReadPipe2;
????si.hStdOutput?=?si.hStdError?=?hWritePipe1;
????char?cmdLine[256]?=?{0};
????GetSystemDirectory(cmdLinesizeof(cmdLine));
????strcat(cmdLine?(“\\cmd.exe“));
????PROCESS_INFORMATION?ProcessInformation;
????if(CreateProcess(cmdLineNULLNULLNULLTRUE0NULLNULL&si&ProcessInformation)?==?0)
????{
????????return?-1;
????}
????unsigned?long?lBytesReadlBytesWrite;//讀寫數(shù)量存放變量
while(TRUE){
lBytesRead=0;
ZeroMemory(Buffsizeof(Buff));
ret=PeekNamedPipe(hReadPipe1BuffSEND_BUFF_SIZE&lBytesRead00);//管道是否有數(shù)據(jù)可讀
if(lBytesRead)????
{
????????????//第一次可以讀到cmd的初始化信息
memset(Buff?0?sizeof(Buff));
????????????ret=ReadFile(hReadPipe1BuffSEND_BUFF_SIZE&lBytesRead0);//讀取管道里的數(shù)據(jù)
????????????//如果讀到數(shù)據(jù),則對數(shù)據(jù)進(jìn)行下一步處理。。。。。。。??
//printf(Buff);
print(Buff);
}
else{
//解決方案??估計windows是以“\r\n“結(jié)束的吧,所以要在命令執(zhí)行后,顯示完全后寫入這個
/***********************************************************/
WriteFile(hWritePipe2?“\r\n“2&lBytesWrite0);
Sleep(100);
ret=ReadFile(hReadPipe1BuffSEND_BUFF_SIZE&lBytesWrite0);//讀取管道里的數(shù)據(jù)
/***********************************************************/
//讀入輸入數(shù)據(jù)??以回車結(jié)束
char?ch;
ZeroMemory(sendBuffsizeof(sendBuff));
int?count=0;
while((ch=getchar())!=‘\n‘)
{
sendBuff[count]=ch;
count++;
}
//加入回車
strcat(sendBuff“\r\n“);
//寫入數(shù)據(jù),執(zhí)行命令
if(!WriteFile(hWritePipe2?sendBuffsizeof(sendBuff)&lBytesWrite0))?????????????????????
{
printf(“WriteFile?Error!!\r\n“);
return?-1;
}
//延時,等待程序執(zhí)行
Sleep(100);
}
}
????
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2820??2013-11-17?15:53??controlDOS\controlDOS.cpp
?????文件???????4329??2013-11-16?18:42??controlDOS\controlDOS.dsp
?????文件????????528??2013-11-16?16:52??controlDOS\controlDOS.dsw
?????文件??????33792??2013-11-16?16:56??controlDOS\controlDOS.ncb
?????文件??????48640??2013-11-16?16:56??controlDOS\controlDOS.opt
?????文件???????1761??2013-11-17?15:55??controlDOS\controlDOS.plg
?????文件?????172092??2013-11-16?16:56??controlDOS\Debug\controlDOS.exe
?????文件?????176516??2013-11-16?16:56??controlDOS\Debug\controlDOS.ilk
?????文件??????44630??2013-11-16?16:55??controlDOS\Debug\controlDOS.obj
?????文件?????190880??2013-11-16?16:53??controlDOS\Debug\controlDOS.pch
?????文件?????345088??2013-11-16?16:55??controlDOS\Debug\controlDOS.pdb
?????文件???????1767??2013-11-16?16:53??controlDOS\Debug\StdAfx.obj
?????文件?????132096??2013-11-16?16:56??controlDOS\Debug\vc60.idb
?????文件?????233472??2013-11-16?16:55??controlDOS\Debug\vc60.pdb
?????文件???????1232??2013-11-16?16:52??controlDOS\ReadMe.txt
?????文件??????40960??2013-11-17?15:55??controlDOS\Release\controlDOS.exe
?????文件????????297??2013-11-16?16:52??controlDOS\StdAfx.cpp
?????文件????????667??2013-11-16?16:52??controlDOS\StdAfx.h
?????目錄??????????0??2013-11-16?16:55??controlDOS\Debug
?????目錄??????????0??2013-11-17?15:55??controlDOS\Release
?????目錄??????????0??2013-11-17?15:55??controlDOS
-----------?---------??----------?-----??----
??????????????1431567????????????????????21
評論
共有 條評論