资源简介
C++匿名管道详解及简单案例(基于VS2013),包括父进程和子进程的创建以及各行代码的详细注释
代码片段和文件信息
#include “stdafx.h“
#include “windows.h“
#include
using namespace std;
HANDLE hRead hWrite;
void ReadMsg()
{
char buf1[512];
DWORD dwRead;
if (!ReadFile(hRead buf1 512 &dwRead NULL))
{
cout<<“读取数据失败!“;
return;
}
else
{
cout << “管道中读取数据为:“< system(“pause“);
}
}
void WriteMsg()
{
char buf[100];
cout << “请输入你要发给子进程的消息:\n“;
cin >> buf;
DWORD dwWrite;
if (!WriteFile(hWrite buf strlen(buf) &dwWrite NULL))
{
cout << “写入数据失败!“;
return;
}
else
cout << “成功写入数据!\n“;
}
int main(int argc char* argv[])
{
SECURITY_ATTRIBUTES sa; //定义一个安全结构体类型的变量Sa1
sa.bInheritHandle = TRUE;//让子进程可以继承父进程创建的匿名管道的读写句柄
sa.lpSecurityDescriptor = NULL;//让系统为创建的匿名管道赋予默认的安全描述符
sa.nLength = sizeof(SECURITY_ATTRIBUTES);//得到结构体(SECURITY_ATTRIBUTES)的长度
if (!CreatePipe(&hRead &hWrite &sa 0))//判断创建匿名管道是否成功
{
cout << “创建匿名管道失败!\n“;
return 0;
}
else
cout << “成功创建匿名管道!\n“;
//如果创建匿名管道成功,就启动子进程,并将匿名管道的读写句柄传递给子进程
STARTUPINFO sui;//创建子进程的函数需要的一个结构体类型的值
PROCESS_INFORMATION pi;
ZeroMemory(&sui sizeof(STARTUPINFO));//将其余的成员全部置零,避免造成不好的影响
sui.cb = sizeof(STARTUPINFO);//cb用来存放结构体变量STARTUPINFO的长度
sui.dwFlags = STARTF_USESTDHANDLES;//标志成员,表示当前STARTUPINFO结构体的标准输入,标准输出和标准错误句柄有用
sui.hStdInput = hRead;
sui.hStdOutput = hWrite;//将子进程的标准输入输出句柄分别设置为管道的读、写句柄
sui.hStdError = GetStdHandle(STD_ERROR_HANDLE);
sui.wShowWindow = SW_SHOW; //隐藏命令行窗口
sui.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
WriteMsg();
if (!CreateProcess(NULL “child.exe“ NULL NULL
TRUE 0 NULL NULL &sui &pi))//创建子进程(十个参数)
{
CloseHandle(hRead);
CloseHandle(hWrite);//关闭句柄,将内核对象的使用计数减少1,这样当操作系统发现内核对象的使用计数为0时,将清除内核对象。
hRead = NULL;
hWrite = NULL;
cout << “创建子进程失败!“;
return 0;
}
else
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
Sleep(200);
ReadMsg();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-09 09:04 匿名管道程序\
目录 0 2018-03-09 09:02 匿名管道程序\Anonymous Pipe\
目录 0 2018-03-09 09:02 匿名管道程序\Anonymous Pipe\Anonymous Pipe\
文件 2274 2018-03-09 08:49 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Anonymous Pipe.cpp
文件 4548 2018-03-09 08:32 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Anonymous Pipe.vcxproj
文件 1321 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Anonymous Pipe.vcxproj.filters
目录 0 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\
文件 155 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.log
文件 206943 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.obj
文件 1703936 2018-03-09 08:32 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.pch
目录 0 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\
文件 209 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\Anonymous Pipe.lastbuildstate
文件 30938 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\CL.read.1.tlog
文件 1984 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\CL.write.1.tlog
文件 1838 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\cl.command.1.tlog
文件 1814 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\li
文件 3544 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\li
文件 1066 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\Anonymous Pipe.tlog\li
文件 11813 2018-03-09 08:32 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\stdafx.obj
文件 764928 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\vc120.idb
文件 487424 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Anonymous Pipe\Debug\vc120.pdb
文件 1559 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe\ReadMe.txt
文件 66560 2018-03-09 09:02 匿名管道程序\Anonymous Pipe\Anonymous Pipe\child.exe
文件 220 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe\stdafx.cpp
文件 234 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe\stdafx.h
文件 236 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe\targetver.h
文件 32702464 2018-03-09 09:02 匿名管道程序\Anonymous Pipe\Anonymous Pipe.sdf
文件 988 2018-03-09 08:31 匿名管道程序\Anonymous Pipe\Anonymous Pipe.sln
文件 19968 2018-03-09 09:02 匿名管道程序\Anonymous Pipe\Anonymous Pipe.v12.suo
目录 0 2018-03-09 08:36 匿名管道程序\Anonymous Pipe\Debug\
文件 74752 2018-03-09 08:55 匿名管道程序\Anonymous Pipe\Debug\Anonymous Pipe.exe
............此处省略38个文件信息
评论
共有 条评论