c实现windows管道

时间: 2023-08-12 10:14:34 浏览: 44
在 Windows 系统中,可以使用 `CreatePipe()` 函数创建一个匿名管道,并使用 `ReadFile()` 和 `WriteFile()` 函数读写管道。 下面是一个简单的示例: ```c #include <windows.h> #include <stdio.h> int main(void) { HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { printf("Error: CreatePipe failed (%d)\n", GetLastError()); return 1; } STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.hStdError = hWritePipe; si.hStdOutput = hWritePipe; si.dwFlags |= STARTF_USESTDHANDLES; if (!CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { printf("Error: CreateProcess failed (%d)\n", GetLastError()); return 1; } char buffer[4096]; DWORD bytesRead; while (ReadFile(hReadPipe, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0) { printf("%.*s", (int)bytesRead, buffer); } CloseHandle(hReadPipe); CloseHandle(hWritePipe); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; } ``` 该程序创建一个匿名管道,然后启动一个新的 cmd.exe 进程,并将其标准输出和标准错误重定向到管道写端。然后,程序从管道读端读取 cmd.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

HP-Socket编译-Linux

HP-Socket编译-Linux
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

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

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

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这