3.2 进程间通信之fifo
一、引言
FIFO常被称为有名管道,不同于管道(pipe)。pipe仅适用于“有血缘关系”的IPC。但FIFO还可以应用于不相关的进程的IPC。实际上,FIFO是Linux基础文件类型中的一种,是在读写内核通道。
函数原型:
int mkfifo(const char *pathname, mode_t mode); 成功返回 0, 失败返回 -
命令:
mkfifo + 管道名 例:mkfifo fifo_one
操作步骤:
1) 通过命令行创建fifo;
2) 使用open、close、read、write等I/O函数操作fifo。
二、例程
1) 创建fifi:
#mkfifio fifo_one
2) fifo 写函数
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h> void sys_err(char *str)
{
perror(str);
exit(-);
}
int main(int argc, char *argv[])
{
int fd, i;
char buf[]; if (argc < ) {
printf("Please enter: ./a.out fifoname\n");
return -;
}
fd = open(argv[], O_WRONLY);//打开fifo
if (fd < )
sys_err("open"); i = ;
while () {
printf("write fifo \n ");
9 sprintf(buf, "hello itcast %d\n", i++); //格式化输出到buf
write(fd, buf, strlen(buf)); //向fifo写入buf
sleep();
}
close(fd); return ;
}
3) fifo 读函数
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h> void sys_err(char *str)
{
perror(str);
exit();
} int main(int argc, char *argv[])
{
int fd, len;
char buf[]; if (argc < ) {
printf("Please enter: ./a.out fifoname\n");
return -;
}
fd = open(argv[], O_RDONLY);//打开fifo
if (fd < )
sys_err("open");
while () {
len = read(fd, buf, sizeof(buf));//从fifo读取数据到buf
write(STDOUT_FILENO, buf, len); //将buf写入标准输出
sleep(); //多個读端时应增加睡眠秒数,放大效果.
}
close(fd);
return ;
}
编译执行:

3.2 进程间通信之fifo的更多相关文章
- linux 进程间通信 之fifo
上一篇博客已经介绍了一种进程间通信的方式,但是那只是针对于有血缘关系的进程,即父子进程间的通信,那对于没有血缘关系的进程,那要怎么通信呢? 这就要创建一个有名管道,来解决无血缘关系的进程通信, fi ...
- 进程间通信之FIFO
FIFO有时被称为命名管道.管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道.但是,通过FIFO,不相关的进程也能交换数据. FIFO是一种文件类型(参考http://www.cnblog ...
- 【APUE】进程间通信之FIFO
FIFO也称为有名管道,它是一种文件类型,是半双工的.FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的“代沟”.普通的无名管道只能让相关的进程进行沟 ...
- linux下的进程间通信概述
管道(PIPE) FIFO(有名管道) XSI消息队列 XSI信号量 XSI共享内存 POSIX信号量 域套接字(Domain Socket) 信号(Signal) 互斥量(Mutex) 其中信号(s ...
- Python3 与 C# 并发编程之~进程先导篇
在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...
- 20155339 《信息安全系统设计》第十周课下作业-IPC
20155339 <信息安全系统设计>第十周课下作业-IPC 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的 ...
- 2017-2018-1 20155307 《信息安全系统设计基础》第十周课上未完成补充以及课下IPC作业
课上内容2:stat命令的实现-mysate 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云 ...
- Linux文件详解
一.Linux文件类型分:普通文件.目录文件.链接文件.设备文件.管道文件. 1.普通文件:由ls -al显示属性时,第一个属性为 [-],例如 [-rwxrwxrwx].包括: 纯文本文件(ASCI ...
- Linux系统编程——进程间通信:命名管道(FIFO)
命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名 ...
随机推荐
- 转:Windows版本判断大全
/***************************************************************************** Operating System Vers ...
- collectd配置
udp proxy - 192.168.48.112 cat > /etc/collectd_25801.conf << EOF Hostname "kvm-48-112& ...
- IOS NSLayoutConstraint 页面布局(通过代码添加约束)
#import "ViewController.h" @interface ViewController () @property (nonatomic, strong) UIVi ...
- 线程概念的外延 Threading Terminology-What Are Threads
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/AboutThrea ...
- Thread control block & thread
https://en.wikipedia.org/wiki/Thread_control_block Thread Control Block (TCB) is a data structure in ...
- 动态规划(DP),0-1背包问题
题目链接:http://poj.org/problem?id=3624 1.p[i][j]表示,背包容量为j,从i,i+1,i+2,...,n的最优解. 2.递推公式 p[i][j]=max(p[i+ ...
- 「bzoj3687: 简单题」
题目 发现需要一个\(O(n\sum a_i )\)的做法 于是可以直接做一个背包,\(dp[i]\)表示和为\(i\)的子集是否有奇数种 \(bitset\)优化一下就好了 #include< ...
- 郑州集训Day4 [小Cat与小鲜肉]
考试的时候由于没有想出这道题就弃疗了 发现主要还是自己姿势不够 [问题描述] \(P\) 校某宿舍人才辈出,其舍长图书馆男神因被偷拍侧身照而在网络上一票走红. 小鲜肉 \(SJY\) 是小 \(Cat ...
- ABP问题记录
按照<Asp.NET Core2.0与 EF的ABP框架入门视频教程>(https://ke.qq.com/course/287301)下载了3.9版本的ABP,开始学习,下面记录遇到的问 ...
- focal loss和retinanet
这个是自己用的focal loss的代码和公式推导:https://github.com/zimenglan-sysu-512/Focal-Loss 这个是有retinanet:https://git ...