进程通讯之-管道通讯

maoxing63570 2010-05-20 09:17:24
#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窗口并没有显示,这又是为什么呢?
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国007程序员 2010-05-20
  • 打赏
  • 举报
回复
没用过双进程的,顶一下
relaxisland 2010-05-20
  • 打赏
  • 举报
回复
不是很明白你的意思,
是这个路径空格的问题吗。

D:\C# Language reference code\Pipe

改成
"D:\C# Language reference code"\Pipe

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧