C++匿名管道详解及简单案例基于VS2013


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 << “请输入你要发给子进程的消息:
“;
cin >> buf;
DWORD dwWrite;
if (!WriteFile(hWrite buf strlen(buf) &dwWrite NULL))
{
cout << “写入数据失败!“;
return;
}
else
cout << “成功写入数据!
“;
}

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 << “创建匿名管道失败!
“;
return 0;
}
else
cout << “成功创建匿名管道!
“;
//如果创建匿名管道成功,就启动子进程,并将匿名管道的读写句柄传递给子进程
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 PipeAnonymous Pipe
     文件        2274  2018-03-09 08:49  匿名管道程序Anonymous PipeAnonymous PipeAnonymous Pipe.cpp
     文件        4548  2018-03-09 08:32  匿名管道程序Anonymous PipeAnonymous PipeAnonymous Pipe.vcxproj
     文件        1321  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous PipeAnonymous Pipe.vcxproj.filters
     目录           0  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebug
     文件         155  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.log
     文件      206943  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.obj
     文件     1703936  2018-03-09 08:32  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.pch
     目录           0  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tlog
     文件         209  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tlogAnonymous Pipe.lastbuildstate
     文件       30938  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tlogCL.read.1.tlog
     文件        1984  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tlogCL.write.1.tlog
     文件        1838  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tlogcl.command.1.tlog
     文件        1814  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tloglink.command.1.tlog
     文件        3544  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tloglink.read.1.tlog
     文件        1066  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugAnonymous Pipe.tloglink.write.1.tlog
     文件       11813  2018-03-09 08:32  匿名管道程序Anonymous PipeAnonymous PipeDebugstdafx.obj
     文件      764928  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugvc120.idb
     文件      487424  2018-03-09 08:55  匿名管道程序Anonymous PipeAnonymous PipeDebugvc120.pdb
     文件        1559  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous PipeReadMe.txt
     文件       66560  2018-03-09 09:02  匿名管道程序Anonymous PipeAnonymous Pipechild.exe
     文件         220  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous Pipestdafx.cpp
     文件         234  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous Pipestdafx.h
     文件         236  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous Pipe argetver.h
     文件    32702464  2018-03-09 09:02  匿名管道程序Anonymous PipeAnonymous Pipe.sdf
     文件         988  2018-03-09 08:31  匿名管道程序Anonymous PipeAnonymous Pipe.sln
     文件       19968  2018-03-09 09:02  匿名管道程序Anonymous PipeAnonymous Pipe.v12.suo
     目录           0  2018-03-09 08:36  匿名管道程序Anonymous PipeDebug
     文件       74752  2018-03-09 08:55  匿名管道程序Anonymous PipeDebugAnonymous Pipe.exe
............此处省略38个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)