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 文件. 命名 ...
随机推荐
- python 后台运行命令
nohup python a.py > a.log 2>&1 & 在窗口中单开虚拟session: tmux new -s "name" 推出虚拟窗口 ...
- SVN的使用教程(一)
SVN使用 第一章 配置SVN 请根据下方网址配置SVN: https://blog.csdn.net/daobantutu/article/details/60467185 安装VisualSVN ...
- vscode 显示"没有活动的源代码控制提供程序“处理
不知为何我的 VS Code 在 1.25 版本开始就一直 ”没有活动的源代码控制提供程序“,找了好几天都没找到,今天终于找到怎么处理了, 切换到插件中找到下图对应的 Git (可以直接再上面搜索框输 ...
- May 18th 2017 Week 20th Thursday
The greater the struggle, the more glorious the triumph. 挑战愈艰巨,胜利愈辉煌. Sometimes it would be better t ...
- js原型链继承及调用父类方法
方法1: var Parent= function () { }; Parent.prototype.process = function(){ alert('parent method'); }; ...
- 最简单的nginx教程 - 如何把一个web应用部署到nginx上
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Ра ...
- 读REDIS数据结构
一.DICT 主要有两个问题: 1.散列冲突,解决办法是拉链法 typedef struct dictEntry { void *key; union { void *val; uint64_t u6 ...
- 三、HTTP协议
1. 基础概念篇 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的 ...
- 记一次msfconsole_android渗透实验
1>查看本机IP 2>生成App木马 3>将生成的木马安装至手机 4>打开msfconsole 1, use exploit/multi/handler 加载模块. 2, ...
- selenium定位学习回顾
之前已经专门学过了定位,但后来因为浏览器比较方便,可以直接复制xpath和css进行定位,个人觉得自己快遗忘了这块,所以专门来回顾一下, 顺便记录一下,以便后期查看. 进行web页面自动化测试,对页面 ...