linux系统编程:进程间通信-fifo
进程间通信-fifo
进程间通信的还有一种方式是fifo。
fifo是还有一种管道:有名管道。从名字能够看出。它也是队列。
使用fifo通信前,得先创建fifo
$ mkfifo myfifo
随后仅仅需对myfifo像文件一样使用即可。
fifo_w.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
struct stu
{
int id;
char name[20];
};
int main(int argc, char **argv)
{
if(argc != 2)
{
fprintf(stderr, "usage:./app fifo\n");
exit(1);
}
int fd;
if((fd = open(argv[1], O_WRONLY)) < 0)
{
fprintf(stderr, "open:can not open file:%s\n", argv[1]);
exit(1);
}
struct stu zx = {0, "zhangxiang"};
int id = 0;
while(1)
{
id++;
zx.id = id;
write(fd, &zx, sizeof(zx));
sleep(1);
}
close(fd);
return 0;
}
fifo_r.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
struct stu
{
int id;
char name[20];
};
int main(int argc, char **argv)
{
if(argc != 2)
{
fprintf(stderr, "usage:./app fifo");
exit(1);
}
int fd;
if((fd = open(argv[1], O_RDONLY)) < 0)
{
fprintf(stderr, "open:can not open file:%s", argv[1]);
exit(1);
}
struct stu zx;
while(1)
{
read(fd, &zx, sizeof(zx));
printf("id=%d,name=%s\n", zx.id, zx.name);
sleep(1);
}
close(fd);
return 0;
}
測试
$ gcc fifo_w.c -o fifo_w
$ gcc fifo_r.c -o fifo_r
$ fifo_w myfifo
//另开一终端
$ fifo_r myfifo
id=1,name=zhangxiang
id=2,name=zhangxiang
id=3,name=zhangxiang
id=4,name=zhangxiang
id=5,name=zhangxiang
id=6,name=zhangxiang
id=7,name=zhangxiang
id=8,name=zhangxiang
^c
以上演示样例中,一个进程不断地向fifo中写入结构体类型的数据。还有一个进程不断地从fifo中读出数据。从而达到进程间的通信。
linux系统编程:进程间通信-fifo的更多相关文章
- linux系统编程--进程间通信
IPC方法 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问, 要交换数据必须通过内核,在内核中开 ...
- Linux系统编程——进程间通信:信号中断处理
什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...
- Linux系统编程——进程间通信:命名管道(FIFO)
命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名 ...
- Linux系统编程——进程间通信(一)
基本操作命令: ps -ajx/-aux/-ef 查看进程间状态/的相互关系 top 动态显示系统中的进程 nice 按照指定的优先级运行 /renice 改变正在运行的进程的优先级 kill -9杀 ...
- Linux系统编程——进程间通信(System V IPC 对象)
基本查看命令 ipcs -m查看共享内存 ipcs -s查看信号量 ipcs -q查看消息队列 ipcrm -m id 删除共享内存 -M+key值 ipcrm ...
- Linux系统编程——进程间通信:管道(pipe)
管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,全部的 UNIX 系统都支持这样的通信机制. 无名管道有例如以下特点: 1.半双工,数据在同一时刻仅仅能在一个 ...
- Linux系统编程——进程间通信:共享内存
概述 url=MdyPihmS_tWLwgWL5CMzaTrwDFHu6euAJJUAjKvlzbJmRw7RfhmkBWwAloo7Y65hLY-kQdHsbqWYP2wc2fk8yq"& ...
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- Linux网络编程--进程间通信(一)
进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...
- Linux 系统编程 学习 总结
背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...
随机推荐
- Node.js Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Str ...
- CSS 备忘
border-radius : 10px / 40px 10表示X轴半径 40表示Y轴半径 font:italic bold 13px/13px arial,sans-serif; ...
- JS5模拟类
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- NHibernate查询示例合集
基本查询 复杂查询示例 /// <summary> /// 获取自定义表单数据中属于部门的部分 /// </summary> /// <param name=&quo ...
- Linux修改date
与cn校时 ntpdate cn.pool.ntp.org 设置时区 TZ='Asia/Shanghai'; export TZ 刷新生效 source ~/.bashrc vi /etc/profi ...
- Excel、Exchange 和 C# (摘要)
Excel.Exchange 和 C#Eric GunnersonMicrosoft Corporation 2003年4月21日 摘要:Eric Gunnerson 将向您介绍如何使用 Outloo ...
- Python概述与安装
Python 一门面向对象的解释性语言. Python优点 开发效率高(有丰富的各种类库,不需要重复造轮子):可移植性:解释性:免费开源:交互式(IDLE,代码写一行执行一行) Python缺点 相对 ...
- javascript第四章--面向对象的程序设计
① 理解对象 ② 创建对象 ③ 继承
- 使用Recovery Services备份文件及文件夹
1.创建恢复服务保管库 2.在backup项中选择本地,备份文件和文件夹选项 3.根据提示下载Agent及保管库凭据 4.在文件服务器上安装Agent 5.选择"继续注册"项,并添 ...
- setTimeout和setInterval的使用
引自(http://www.cnblogs.com/qiantuwuliang/archive/2009/06/20/1507304.html) 这两个方法都可以用来实现在一个固定时间段之后去执行Ja ...