进程通讯之-管道通讯
#include <windows.h>
#include <stdio.h>
void main ()
{
HANDLE hRead;
HANDLE hWrite;
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
char szApp[100];
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
void Write(HANDLE hWrite);
void Read(HANDLE hRead);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
printf("创建管道失败!\n");
CloseHandle(hRead);
CloseHandle(hWrite);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.hStdInput=hRead;
si.hStdOutput=hWrite;
si.hStdError=GetStdHandle(STD_ERROR_HANDLE);
si.wShowWindow=SW_SHOWNORMAL;
GetSystemDirectory(szApp,MAX_PATH+1);
strcat(szApp,"\\cmd.exe");
if(!CreateProcess(szApp,NULL,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
printf("进程创建失败!\n");
return;
}
Read(hRead);
Write(hWrite);
}
void Read(HANDLE hRead)
{
char recvBuff[1024];
DWORD dwRead;
if(!ReadFile(hRead,recvBuff,strlen(recvBuff),&dwRead,NULL))
{
printf("%s",recvBuff);
}
}
void Write(HANDLE hWrite)
{
char sendBuff[1024];
DWORD dwWrite;
gets(sendBuff);
if(!WriteFile(hWrite,sendBuff,strlen(sendBuff)+1,&dwWrite,NULL))
{
printf("写入数据成功!\n");
}
}
此代码运行的时候不能得到正确的结果,具体说明如下,我想要实现的是在父进程中输入DOS命令,然后把执行后的结果返回到程序中来显示,但是它运行的结果是:
'版权所有' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'D:\C#' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
不知道为什么了。不过我这个程序的目录是D:\C# Language reference code\Pipe。还有一点就是,我要求现实窗口,但是cmd窗口并没有显示,这又是为什么呢?