文章目录

  • 代码实现
  • 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函数

openUNIX 系统(包括 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函数】相关推荐

  1. 管道实现父子进程的信息传递(二)【标准流和其文件描述符、fwrite函数、perror函数】

    文章目录 代码实现 标准流 和 标准流文件描述符 代码中用到的函数 fwrite() perror() 在复习进程间的通信方式时又写了一遍,和 管道实现父子进程的信息传递(一)[fork函数.pipe ...

  2. 操作系统实验四——使用命名管道实现进程通信

    操作系统实验四--使用命名管道实现进程通信 一. 实验目的 (1)了解windows系统环境下的进程通讯机制. (2)熟悉Windows系统提供的进程通信API. 二. 实验准备 相关API函数介绍 ...

  3. 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】

    文章目录 题目描述 代码实现 关于pipe函数 关于读写操作 关于读写端口 关于wait函数 功能: 注意: 关于fork函数 题目描述 编写一个程序,利用管道实现父子进程的通信,父进程向子进程发送信 ...

  4. linux c之用命名管道实现进程通信

    1.命名管道相关信息介绍 不是很了解命名管道先看这个篇博客 http://blog.csdn.net/u011068702/article/details/55102379 linux c之命名管道简 ...

  5. linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道

    与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...

  6. Linux——匿名管道、命名管道及进程池概念和实现原理

    目录 一.什么是匿名管道 二.如何使用匿名管道 (一).pipe原理 (二).pipe使用 三.命名管道概念及区别 (一).什么是命名管道 (二).与匿名管道的联系和区别 四.命名管道的使用 (一). ...

  7. Python使用管道实现进程间数据传递

    from multiprocessing import Process, Pipedef f(conn):conn.send('Hello World!') #向管道中发送数据conn.close() ...

  8. Linux —进程间的五种通信方式—(半双工管道、命名管道、消息队列、信号、共享内存),外加信号量。直接上代码:

    无名管道pipe(半双工):(仅限同一个程序运行) 创建无名管道会生成特殊文件,只存在于内存中 #include <stdio.h> #include <stdlib.h> # ...

  9. php 进程通信系列 (一) 命名管道

    php 进程通信系类 (一) 命名管道 前言 进程间为什么要通信 进程如何实现通信 常见进程通信方式 管道概念 命名管道实现 php 通过 [posix_mkfifo](https://www.php ...

最新文章

  1. CveService.java
  2. 入职3个月的Java程序员面临转正,挑战大厂重燃激情!
  3. 如何为SAP Cloud for Customer Lead页面配置自定义的Source字段
  4. 完整的WebApplication JSF EJB JPA JAAS –第1部分
  5. uva 11728——Alternate Task
  6. 学校计算机教室安全预案,小学校园微机室安全事故应急疏散预案
  7. 论文投稿新规则,不用跑出SOTA,还能“内定”发论文?!
  8. 习题2.7 弹球距离 (15 分)
  9. python用于标识类方法的是_Python类的设计与使用
  10. java switch finally_Java中的switch疑问
  11. 【浏览器硬件交互篇】浏览器js调用摄像头拍照
  12. 本特利电涡流传感器 330876-02-90-01-CN
  13. mac电脑查看CPU温度
  14. 移位运算(计算机组成原理15)
  15. php经典实例博客管理,PHP经典项目案例-(一)博客管理系统2
  16. 华为云服务之弹性云服务器ECS的深度使用和云端实践
  17. 免费做流程图软件推荐ProcessOn
  18. adb模拟按键home_adb 命令模拟按键事件 模拟 点击 事件
  19. AR互动大屏丨Add_自动循环动画、遮挡效果的实现
  20. 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】

热门文章

  1. python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...
  2. linux更改cxxflags环境变量,在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置(pro文件中增加 QMAKE_CXXFLAGS += -m32 命令)...
  3. oracle 11g exp 报错 EXP-00056;ORA-12154;EXP-00000;
  4. SIP协议学习2-pjsip
  5. WINCE的BIB文件解析
  6. css 实现标签切换,CSS_纯CSS实现Tab切换标签效果代码,本文实例讲述了纯CSS实现Tab切 - phpStudy...
  7. 【转】有限状态机用法教程
  8. 【转】Microsoft Graph 桌面应用程序
  9. 使用VS code 创建 Azure Functions,从blob触发,解析,发送至Service Bus
  10. 老王说ros的tf库