zoukankan      html  css  js  c++  java
  • 匿名管道

    匿名管道是一个未命名的、单向管道,通常用来在一个父进程和一个子进程之间传输数据;匿名管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信;

    1、创建匿名管道

      BOOL CreatePipe(

          PHANDLE hReadPipe,                  

          PHANDLE hWritePipe,                     

          LPSECURITY_ATTRIBUTES lpPipeAttributes, 

          DWORD nSize                             

      );

          hReadPipe:作为返回值,返回管道的读取句柄;

          hWritePipe:作为返回值,返回管道的写入句柄;

          lpPipeAttributes:一个指向SECURITY_ATTRIBUTES结构体的指针,检测返回的句柄能否被子进程继承;要在父进程和子进程间建立匿名管道,该参数就不可以设为NULL,子进程需继承父进程的管道句柄,须构造该结构体变量:

            typedef struct _SECURITY_ATTRIBUTES { 

                DWORD  nLength;  //指定该结构体的大小

                LPVOID lpSecurityDescriptor;  //NULL

                BOOL   bInheritHandle;  //TRUE

            } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;

          nSize:指定管道的缓冲区的大小;如果设为0,系统将使用默认的缓冲区大小;

    2、一个进程的创建

      BOOL CreateProcess(

          LPCTSTR lpApplicationName,

          LPTSTR lpCommandLine, 

          LPSECURITY_ATTRIBUTES lpProcessAttributes,

          LPSECURITY_ATTRIBUTES lpThreadAttributes, 

          BOOL bInheritHandles, 

          DWORD dwCreationFlags,

          LPVOID lpEnvironment, 

          LPCTSTR lpCurrentDirectory, 

          LPSTARTUPINFO lpStartupInfo,

          LPPROCESS_INFORMATION lpProcessInformation 

      );

          lpApplicationName:指向一个字符串,用来指定可执行程序的名称,该名称可以是该程序的完整路径和文件名,也可以是部分名称;可以设为NULL,则文件名必须是lpCommandLine指向的字符串中的第一个空格界定的标记;

          lpCommandLine:指向一个字符串,用来传递命令行的参数;通常在调用该函数时,将可执行文件名和命令行参数都传递给lpCommandLine参数;

          lpProcessAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用来设置新进程的进程对象的安全性,及指定将来创建的子进程是否可以继承该进程对象的句柄;可以设为NULL;

          lpThreadAttributes:指向SECURITY_ATTRIBUTES结构体的指针,用来设置新进程的主线程对象的安全性,及指定将来创建的子进程是否可以继承该主线程对象的句柄;可以设为NULL;

          bInheritHandles:该参数用来指定创建的子进程是否能够继承父进程的对象句柄;

          dwCreationFlags:指定控件优先级类和进程创建的附加标记;如果只是为了启动子进程,并不需要设置它创建的标记,可设为0;

          lpEnvironment:一个指向环境块的指针;设为NULL,新进程将使用调用进程的环境;

          lpCurrentDirectory:指定子进程当前的路径,必须是完整的路径名;如果设为NULL,则新进程将与调用进程拥有相同的驱动器和目录;

          lpStartupInfo:一个指向STARTUPINFO结构体的指针,用来指定新进程的主窗口将如何显示;

          lpProcessInformation:作为返回值使用,是一个指向PROCESS_INFORMATION结构体的指针,用来接收关于新进程的标识信息;

            typedef struct _PROCESS_INFORMATION {

                HANDLE hProcess;  //新创建的进程的句柄

                HANDLE hThread;  //新创建的进程的主线程的句柄

                DWORD dwProcessId;  //标识一个进程

                DWORD dwThreadId;  //标识一个线程

            } PROCESS_INFORMATION;

  • 相关阅读:
    docker入门
    初级排序算法1-定义排序规则
    Lambda入门
    mac编辑器vim美化
    SSM搭建
    Memcached安装教程及使用
    lombok
    立个Flag-第一天
    等高线自适应分割
    wpf软件模拟鼠标键盘操作
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6920951.html
Copyright © 2011-2022 走看看