php+管道+pipe管道,C++ 匿名管道执行DOS命令
最近在開發一個項目。需要PHP Sock連接到服務器中執行DOS 命令 , 所以想到了命名管道 CreatePipe 其函數原型BOOL CreatePipe(
PHANDLE hReadPipe, ? ? ? ? ? ? ? ? ? ? ? // 指定一個變量,設為管道讀入(輸出)端的一個句柄
PHANDLE hWritePipe, ? ? ? ? ? ? ? ? ? ? ?// 指定一個變量,設為管道寫入(輸入)端的一個句柄
LPSECURITY_ATTRIBUTES lpPipeAttributes, ?// 安全屬性
DWORD nSize ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 管道尺寸
);
該CreatePipe函數創建一個匿名管道,并返回句柄的讀取和寫入管道的末端。SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
string str= "cmd /k net user"; ?//命令行
if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
//MessageBox("Error On CreatePipe()");
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;
OutputDebugString("1");
if (!CreateProcess(NULL,(char*)str.c_str()//執行cmd命令,并在命名中管道中寫入cmd命令返回的串
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) {
//MessageBox("Error on CreateProcess()");
return FALSE;
}
CloseHandle(hWrite);
//OutputDebugString("2");
char buffer[4096] ={0} ;
DWORD bytesRead;
string strResult="";
while(1)
{
memset(buffer,0,4096);
if(ReadFile(hRead,buffer,4096,&bytesRead,NULL) != NULL)//從命名管道中讀取數據
{
strResult += buffer;
cout << strResult;
OutputDebugString(buffer);
}
else
{
break;
}
}
CloseHandle(hRead);
總結
以上是生活随笔為你收集整理的php+管道+pipe管道,C++ 匿名管道执行DOS命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西湖风景是谁画的呢?
- 下一篇: 拼多多苹果三代蓝牙耳机砍价的是多少钱?