命名管道实现进程的信息传递【mkfifo函数、open函数】
文章目录
- 代码实现
- mkfifo函数
- open函数
代码实现
#include<fcntl.h> // open()
#include<sys/wait.h> // wait()
#include<sys/types.h> // mkfifo()
#include<sys/stat.h> // mkfifo()
#include<iostream>
#include<unistd.h> // fork()using namespace std;#define MAXLINE 80int main(){char buff[MAXLINE];if(mkfifo("fifo", 0664) == -1){cerr << "mififo: " << endl;exit(1);}pid_t pid = fork();if(pid < 0){cerr << "fork: " << endl;exit(1);}if(pid == 0){int read_fd = open("fifo", O_RDONLY);int len = read(read_fd, buff, MAXLINE);write(STDOUT_FILENO, buff, len);close(read_fd);exit(0);}else{int write_fd = open("fifo", O_WRONLY);write(write_fd, "cow a cow a!\n", 13);close(write_fd);wait(NULL);}
}
输出结果:
mkfifo函数
mkfifo
是一个建立命名管道的函数。
表头文件:
#include<sys/types.h>
#include<sys/stat.h>
定义函数:
int mkfifo(const char * pathname,mode_t mode);
依参数 `pathname `建立特殊的 `FIFO` 文件,该文件必须不存在。
参数mode为该文件的权限。
open函数
open
是 UNIX
系统(包括 LINUX、Mac
等)的系统调用函数,区别于C语言库函数 fopen
。以可写的方式 fopen
一个文件时,如果 文件不存在则会自动创建 ,而 open
一个文件时必须 明确 O_CREAT
才会创建文件 ,否则文件不存在就出错返回。
头文件:#include<fcntl.h>
定义函数:
int open(constchar*pathname,int flags);
int open(constchar*pathname,int flags,mode_t mode);
参数说明:
1.pathname —— 是待打开/创建文件的POSIX路径名(如/home/user/a.cpp)。
2.flags —— 于指定文件的打开/创建模式,这个参数可由以下一个或者多个常量(定义于fcntl.h)进行“或”运算,构成falgs。
3.mode —— 仅当创建新文件时(即 使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。
参数选项:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR: 读,写打开
这三个常量,必须指定一个且只能指定一个O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限。O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。
返回值:成功:新打开的文件描述符。失败:-1。
open返回的文件描述符一定是最小的而且没有被使用的。
命名管道实现进程的信息传递【mkfifo函数、open函数】相关推荐
- 管道实现父子进程的信息传递(二)【标准流和其文件描述符、fwrite函数、perror函数】
文章目录 代码实现 标准流 和 标准流文件描述符 代码中用到的函数 fwrite() perror() 在复习进程间的通信方式时又写了一遍,和 管道实现父子进程的信息传递(一)[fork函数.pipe ...
- 操作系统实验四——使用命名管道实现进程通信
操作系统实验四--使用命名管道实现进程通信 一. 实验目的 (1)了解windows系统环境下的进程通讯机制. (2)熟悉Windows系统提供的进程通信API. 二. 实验准备 相关API函数介绍 ...
- 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】
文章目录 题目描述 代码实现 关于pipe函数 关于读写操作 关于读写端口 关于wait函数 功能: 注意: 关于fork函数 题目描述 编写一个程序,利用管道实现父子进程的通信,父进程向子进程发送信 ...
- linux c之用命名管道实现进程通信
1.命名管道相关信息介绍 不是很了解命名管道先看这个篇博客 http://blog.csdn.net/u011068702/article/details/55102379 linux c之命名管道简 ...
- linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道
与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...
- Linux——匿名管道、命名管道及进程池概念和实现原理
目录 一.什么是匿名管道 二.如何使用匿名管道 (一).pipe原理 (二).pipe使用 三.命名管道概念及区别 (一).什么是命名管道 (二).与匿名管道的联系和区别 四.命名管道的使用 (一). ...
- Python使用管道实现进程间数据传递
from multiprocessing import Process, Pipedef f(conn):conn.send('Hello World!') #向管道中发送数据conn.close() ...
- Linux —进程间的五种通信方式—(半双工管道、命名管道、消息队列、信号、共享内存),外加信号量。直接上代码:
无名管道pipe(半双工):(仅限同一个程序运行) 创建无名管道会生成特殊文件,只存在于内存中 #include <stdio.h> #include <stdlib.h> # ...
- php 进程通信系列 (一) 命名管道
php 进程通信系类 (一) 命名管道 前言 进程间为什么要通信 进程如何实现通信 常见进程通信方式 管道概念 命名管道实现 php 通过 [posix_mkfifo](https://www.php ...
最新文章
- CveService.java
- 入职3个月的Java程序员面临转正,挑战大厂重燃激情!
- 如何为SAP Cloud for Customer Lead页面配置自定义的Source字段
- 完整的WebApplication JSF EJB JPA JAAS –第1部分
- uva 11728——Alternate Task
- 学校计算机教室安全预案,小学校园微机室安全事故应急疏散预案
- 论文投稿新规则,不用跑出SOTA,还能“内定”发论文?!
- 习题2.7 弹球距离 (15 分)
- python用于标识类方法的是_Python类的设计与使用
- java switch finally_Java中的switch疑问
- 【浏览器硬件交互篇】浏览器js调用摄像头拍照
- 本特利电涡流传感器 330876-02-90-01-CN
- mac电脑查看CPU温度
- 移位运算(计算机组成原理15)
- php经典实例博客管理,PHP经典项目案例-(一)博客管理系统2
- 华为云服务之弹性云服务器ECS的深度使用和云端实践
- 免费做流程图软件推荐ProcessOn
- adb模拟按键home_adb 命令模拟按键事件 模拟 点击 事件
- AR互动大屏丨Add_自动循环动画、遮挡效果的实现
- 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】
热门文章
- python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...
- linux更改cxxflags环境变量,在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置(pro文件中增加 QMAKE_CXXFLAGS += -m32 命令)...
- oracle 11g exp 报错 EXP-00056;ORA-12154;EXP-00000;
- SIP协议学习2-pjsip
- WINCE的BIB文件解析
- css 实现标签切换,CSS_纯CSS实现Tab切换标签效果代码,本文实例讲述了纯CSS实现Tab切 - phpStudy...
- 【转】有限状态机用法教程
- 【转】Microsoft Graph 桌面应用程序
- 使用VS code 创建 Azure Functions,从blob触发,解析,发送至Service Bus
- 老王说ros的tf库