进程间通信-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中读出数据。从而达到进程间的通信。

CCPP Blog 文件夹

linux系统编程:进程间通信-fifo的更多相关文章

  1. linux系统编程--进程间通信

    IPC方法 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问, 要交换数据必须通过内核,在内核中开 ...

  2. Linux系统编程——进程间通信:信号中断处理

    什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...

  3. Linux系统编程——进程间通信:命名管道(FIFO)

    命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名 ...

  4. Linux系统编程——进程间通信(一)

    基本操作命令: ps -ajx/-aux/-ef 查看进程间状态/的相互关系 top 动态显示系统中的进程 nice 按照指定的优先级运行 /renice 改变正在运行的进程的优先级 kill -9杀 ...

  5. Linux系统编程——进程间通信(System V IPC 对象)

    基本查看命令 ipcs  -m查看共享内存        ipcs -s查看信号量        ipcs -q查看消息队列 ipcrm  -m  id 删除共享内存   -M+key值 ipcrm ...

  6. Linux系统编程——进程间通信:管道(pipe)

    管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,全部的 UNIX 系统都支持这样的通信机制. 无名管道有例如以下特点: 1.半双工,数据在同一时刻仅仅能在一个 ...

  7. Linux系统编程——进程间通信:共享内存

    概述 url=MdyPihmS_tWLwgWL5CMzaTrwDFHu6euAJJUAjKvlzbJmRw7RfhmkBWwAloo7Y65hLY-kQdHsbqWYP2wc2fk8yq"& ...

  8. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  9. Linux网络编程--进程间通信(一)

    进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...

  10. Linux 系统编程 学习 总结

    背景 整理了Liunx 关于 进程间通信的 很常见的知识. 目录 与 说明 Linux 系统编程 学习:000-有关概念 介绍了有关的基础概念,为以后的学习打下基础. Linux 系统编程 学习:00 ...

随机推荐

  1. iPad web APP 开发相关

    1.移除 browser chrome,全屏启动  <meta name="apple-mobile-web-app-capable" content="yes&q ...

  2. HTTPCLIENT 模拟登陆

    第一步构建忽略https验证的httpclient public static CloseableHttpClient getHttpClient() throws Exception { SSLCo ...

  3. MUI开发记录——我的考勤

    已经好久没有更新技术博客了,因为最近一直在做跨平台web app应用的开发,由于是刚做这个,也没太多经验同大家分享,可我是一个闲不住的人,我还是决定于百忙之中抽空整理一篇,记录下开发历程......— ...

  4. #UnityTips# 2017.11.14

    hi,all.最近比较忙,所以更新也比较慢了. 今天就来和大家分享一个小Tip,它是关于UGUI的坑的. 使用过UGUI的朋友们都知道,Canvas的渲染方式有三种: Screen Space Ove ...

  5. IpHelper根据客户端IP进行网站分流

    public class IpHelper    {        // 核心方法:IP搜索       /// <summary>        /// 查找IP所属地区,确保web.c ...

  6. C#中获取当前系统中安装的所有字体及预定义颜色

    需要引用命名空间using System.Drawing.Text;.... //获取系统字体:InstalledFontCollection fc = new InstalledFontCollec ...

  7. Linux系列教程(二十二)——Linux的bash变量

    上篇博客我们介绍了bash的一些基本功能,这是我们平时操作最频繁的.本篇博客我们介绍bash的变量,为后面编写shell脚本做铺垫. 1.什么是变量 变量是计算机内存的单元,其中存放的值可以改变. 当 ...

  8. js中的break,continue和return到底怎么用?

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  9. CLR类型设计之泛型(一)

    在讨论泛型之前,我们先讨论一下在没有泛型的世界里,如果我们想要创建一个独立于被包含类型的类和方法,我们需要定义objece类型,但是使用object就要面对装箱和拆箱的操作,装箱和拆箱会很损耗性能,我 ...

  10. 浅谈Verilog HDL代码编写风格

    消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次 ...