Windowsc++实现管道代码

时间: 2023-08-19 08:13:25 浏览: 52
以下是 Windows C++ 实现匿名管道的示例代码: ```c++ #include <iostream> #include <Windows.h> using namespace std; int main() { HANDLE hReadPipe, hWritePipe; // 定义管道句柄 SECURITY_ATTRIBUTES sa; // 定义安全属性 char buf[1024]; // 定义缓冲区 DWORD bytesRead; // 读取的字节数 // 初始化安全属性 sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; // 创建管道 if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { cout << "Create pipe failed!" << endl; return -1; } // 创建子进程 STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); si.hStdInput = hReadPipe; // 将管道的读端设置为子进程的标准输入 si.dwFlags = STARTF_USESTDHANDLES; // 启用标准输入输出句柄 if (!CreateProcess(NULL, "child.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { cout << "Create child process failed!" << endl; return -1; } // 关闭子进程的句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); // 关闭管道的写端 CloseHandle(hWritePipe); // 从管道中读取数据 ReadFile(hReadPipe, buf, sizeof(buf), &bytesRead, NULL); cout << "Parent process received message: " << buf << endl; // 关闭管道的读端 CloseHandle(hReadPipe); return 0; } ``` 该示例代码中,使用 `CreatePipe` 函数创建了一个匿名管道,并使用 `CreateProcess` 函数创建了一个子进程。在主进程中,将管道的读端设置为子进程的标准输入,并启用标准输入输出句柄。然后关闭了子进程的句柄和管道的写端,并通过 `ReadFile` 函数从管道中读取数据,并输出到控制台。最后关闭了管道的读端。注意,子进程的代码需要单独编写并编译成可执行文件 `child.exe`。

相关推荐

补充作业: 1.. Samba 应用案例一:设置 Samba 共享目录/ software ,允许用户 jack 与 mary ww 可以通过 Windows 客户端访问,并具有读写权限。请写出对应的修改代码,并阐述针对此场景的 Samba 服务启动与测试的流程(包含命令) 2.Samba应用案例二:建立部门资料共享目录/ hr ,部门每个人都能读写,但不能删除别人的文件。请写出对应的修改代码,并阐述针对此场景的 Samba 服务启动与测试的流程(包含命令)。 3.某单位的 Linux 系统周1至周5的下午5:45分都需要关闭系统。请设计相应的计划任务实现这一目标。 4.完成命令 (1)结合使用管道连接符修改用户 benben 的密码,并设置密码为(2)+将 benben 用户添加到已经存在的组 gnetwork 中(以附加组添加)。 (3)+ CentOS 系统上的普通用户 benben 已经完成了所有历史使命,请在服务器上彻底删除该用户及其相关数据。 (4)﹣请使用 yum 命令在线安装 samba 服务。 (5)+请解压/ usr / local / src /下的 jdk . tar . gz 包至/ home / benben /目录下。。 (6)+请使用命令查看 Linux 系统中所有的进程信息。 (7)+请使用命令关闭 Linux 系统的防火墙。. (8)+请使用命令设置 samba 服务随 CentOS 7开机自启动(服务名为 smb )。 (9)已知 benben 为 CentOS 系统的普通用户,请设计命令只查看/ etc / passwd 中关于 benben 的信息记录。 (10)如何确定 Linux 系统中已经安装了 sudo 服务?| "network2023"。

1.. Samba 应用案例一:设置 Samba 共享目录/ software ,允许用户 jack 与mary 可以通过 Windows 客户端访问,并具有读写权限。请写出对应的修改代码,并阐述针对此场景的 Samba 服务启动与测试的流程(包含命令) 2.Samba应用案例二:建立部门资料共享目录/ hr ,部门每个人都能读写,但不能删除别人的文件。请写出对应的修改代码,并阐述针对此场景的 Samba 服务启动与测试的流程(包含命令)。 3.某单位的 Linux 系统周1至周5的下午5:45分都需要关闭系统。请设计相应的计划任务实现这一目标。 4.完成命令 (1)结合使用管道连接符修改用户 benben 的密码,并设置密码为“network2023” (2)将 benben 用户添加到已经存在的组 gnetwork 中(以附加组添加)。 (3)CentOS 系统上的普通用户 benben 已经完成了所有历史使命,请在服务器上彻底删除该用户及其相关数据。 (4)请使用 yum 命令在线安装 samba 服务。 (5)请解压/ usr / local / src /下的 jdk.tar.gz包至/ home / benben /目录下。。 (6)请使用命令查看 Linux 系统中所有的进程信息。 (7)请使用命令关闭 Linux 系统的防火墙。. (8)请使用命令设置 samba 服务随 CentOS 7开机自启动(服务名为 smb )。 (9已知 benben 为 CentOS 系统的普通用户,请设计命令只查看/ etc / passwd 中关于 benben 的信息记录。 (10)如何确定 Linux 系统中已经安装了 sudo 服务?

#include <Windows.h> #include <mutex> #include <condition_variable> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; string camera_path = "0"; string rtmpUrl = "rtmp://server/live/streamName"; Mat frame; CRITICAL_SECTION mtx; CONDITION_VARIABLE cond; PROCESS_INFORMATION pi; DWORD WINAPI capture_func(LPVOID args) { VideoCapture cap(camera_path); while (true) { cap.read(frame); EnterCriticalSection(&mtx); InitializeConditionVariable(&cond); WakeConditionVariable(&cond); LeaveCriticalSection(&mtx); } } DWORD WINAPI push_func(LPVOID args) { HANDLE pipeRead = NULL, pipeWrite; CreatePipe(&pipeRead, &pipeWrite, NULL, 0); EnterCriticalSection(&mtx); InitializeConditionVariable(&cond); STARTUPINFO si; si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; HANDLE tmp = pipeRead; si.hStdInput = tmp; wchar_t cmd[4096]; mbstowcs(cmd, "ffmpeg -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -s 640x480 - \\r 30 - \\i pipe : 0 - \\c : v libx264 -preset ultrafast - \\f flv rtmp ://server/live/streamName ", strlen("ffmpeg -f rawvideo ... ") + 1); CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); CloseHandle(pipeRead); CloseHandle(si.hStdInput); while (true) { SleepConditionVariableCS(&cond, &mtx, INFINITE); DWORD dwWritten; if (!WriteFile(pipeWrite, frame.data, frame.total() * frame.elemSize(), &dwWritten, NULL)) { cout << "Failed to write to pipe. Error: " << GetLastError() << endl; } } LeaveCriticalSection(&mtx); CloseHandle(pipeWrite); } int main() { InitializeCriticalSection(&mtx); EnterCriticalSection(&mtx); InitializeConditionVariable(&cond); LeaveCriticalSection(&mtx); HANDLE capture_thread = CreateThread(NULL, 0, capture_func, NULL, 0, NULL); HANDLE pipeRead, pipeWrite; CreatePipe(&pipeRead, &pipeWrite, NULL, 0); CloseHandle(pipeRead); CloseHandle(pipeWrite); WaitForSingleObject(pi.hProcess, INFINITE); }

最新推荐

recommend-type

WINDOWS/C语言/管道通信实现机制

Windows管道通信范例 fSuccess = ReadFile(hPipe,ReadData,BUFSIZE,&cbBytesRead,NULL); if (! fSuccess || cbBytesRead == 0) break; else { cout ; } //写数据 fSuccess = WriteFile( hPipe, // handle to pipe s....
recommend-type

华中科技大学操作系统实验报告.docx

编制一段程序,实现进程的管道通讯:使用系统调用pipe( )建立一条管道线;两个子进程分别循环向这条管道写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则循环从管道中读出信息...
recommend-type

一个进程池的服务器程序

char c = 'c'; int req_num = 0; int child_num = PRECHILD; REPORT rep; while (1) { //printf("req_num = %d, child_num = %d\n", req_num, child_num); if (read(fd1[0], &rep, sizeof(rep)) (rep)) {//...
recommend-type

华为OD机试D卷 - 用连续自然数之和来表达整数 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。