环境:Vmware Workstation;CentOS-6.4-x86_64

说明:

对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入。

步骤:

1、创建两个管道:

[negivup@negivup mycode]$ mkfifo fifo1
[negivup@negivup mycode]$ mkfifo fifo2
[negivup@negivup mycode]$ ls
fifo1  fifo2

2、编写makefile文件:

.SUFFIXES:.c .oCC=gccSRCS1=readfifo.c
OBJS1=$(SRCS1:.c=.o)
EXEC1=readfifoSRCS2=writefifo.c
OBJS2=$(SRCS2:.c=.o)
EXEC2=writefifostart: $(OBJS1) $(OBJS2)$(CC) -o $(EXEC1) $(OBJS1)$(CC) -o $(EXEC2) $(OBJS2)@echo "--------------------------OK------------------------".c.o:$(CC) -Wall -o $@ -c $<clean:rm -rf $(OBJS1) $(EXEC1)rm -rf $(OBJS2) $(EXEC2)

3、编写读取管道的源文件readfifo.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>int main(void)
{pid_t pid = fork(); //创建了两个进程,父子关系if (pid > 0) //在主进程里面{int fd1 = open("fifo1", O_WRONLY);if (fd1 == -1){printf("open fifo1 error, %s\n", strerror(errno));return -1;}char buf[1024];while (1){memset(buf, 0, sizeof(buf));read(STDIN_FILENO, buf, sizeof(buf));write(fd1, buf, strlen(buf));}close(fd1);} else{int fd1 = open("fifo2", O_RDONLY);if (fd1 == -1){printf("open fifo2 error, %s\n", strerror(errno));return -1;}char buf[1024];while (1){memset(buf, 0, sizeof(buf));read(fd1, buf, sizeof(buf));printf("%s", buf);}close(fd1);}return 0;
}

4、编写写入管道的源文件writefifo.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>int main(void)
{pid_t pid = fork(); //创建了两个进程,父子关系if (pid > 0) //在主进程里面{int fd1 = open("fifo2", O_WRONLY);if (fd1 == -1){printf("open fifo2 error, %s\n", strerror(errno));return -1;}char buf[1024];while (1){memset(buf, 0, sizeof(buf));read(STDIN_FILENO, buf, sizeof(buf));write(fd1, buf, strlen(buf));}close(fd1);} else{int fd1 = open("fifo1", O_RDONLY);if (fd1 == -1){printf("open fifo1 error, %s\n", strerror(errno));return -1;}char buf[1024];while (1){memset(buf, 0, sizeof(buf));read(fd1, buf, sizeof(buf));printf("%s", buf);}close(fd1);}return 0;
}

5、编译并执行readfifo:

[negivup@negivup mycode]$ make
gcc -Wall -o readfifo.o -c readfifo.c
gcc -Wall -o writefifo.o -c writefifo.c
gcc -o readfifo readfifo.o
gcc -o writefifo writefifo.o
--------------------------OK------------------------
[negivup@negivup mycode]$ readfifo 

6、打开一个新的终端,执行writefifo:

[negivup@negivup mycode]$ writefifo
safd

这样就实现了两个进程之间的自由通信了。

需要特别注意的是,一个管道的一端,如果确定是读取的操作,那么就不能写入;同理,如果确定是写入的操作,就不能读取。

Linux下的有名管道---使用两个管道实现两个进程之间的通信(手机模式)相关推荐

  1. Linux 进程及进程之间的通信机制——管道

    参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...

  2. linux:进程之间的通信

    ipc :进程间通信(InterProcess Communication) 1.管道 同一时间是单向的:父读子写,或父写子读  管道中的数据 ,读走就没了  参数是一个整型数的数组,数组的大小是两个 ...

  3. linux进程间的通信实验,linux实验进程之间的通信.doc

    院 系: 计算机学院 实验课程:linux内核设计与实现 实验项目:进程之间的通信 指导老师:冯刚 开课时间: 2010 - 2011 年度第 2 学期 专 业:计算机科学与技术(师范) 班 级:2班 ...

  4. Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信

    Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信 软件: Quartus II 17.0 芯片: ALTERA Cyclone5 5CG ...

  5. Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)

    环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入. 步骤: 1.创建两个管道 ...

  6. linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道

    环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 1.创建管道的时候,使用的函数:int mkfifo(const char *pathname, mode_t ...

  7. linux下的有名管道文件读写操作

    前言说明: 宿主主机系统:window 7 旗舰版 虚拟机:VMware 10.0.4 操作平台:Ubuntu 12.04 本文代码在个人电脑可以运行,不确保在其他平台可以正确运行 这两天在学进程通信 ...

  8. linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

  9. Linux下SVN服务器同时支持Apache的http和https及svnserve独立服务器三种模式且使用相同的访问权限账号...

    1.在服务器上安装配置SVN服务: 2.配置SVN服务同时支持Apache的http和svnserve独立服务器两种模式访问: 3.Apache的http和svnserve独立服务器两种模式使用相同的 ...

最新文章

  1. vs2008中,在OCX控件中应用doc/view基本步骤
  2. 【python教程】对多线程中join()的详细教程
  3. RocketMQ的Consumer详解之push和pull模式(长轮询)
  4. 【数据结构】KMP算法(c语言)
  5. 怎么查看和获取SQL Server实例名
  6. 从留存的本质出发,制定留存策略
  7. cef 前进后台 实现_CefSpider: 一个基于Webkit,Cef框架构建爬虫,项目代号:“车风”,具备浏览器所有特性,欢迎你给我一个Star,你的Star是该项目前进的动力!...
  8. python保存csv_在python中修改和保存csv文件
  9. Python 简写操作(for、if简写、匿名函数)
  10. 基于JAVA+Servlet+JSP+MYSQL的校园门户信息管理系统
  11. 【推荐系统】智能推荐算法在直播场景中的应用
  12. win7下u盘安装ubuntu组成双系统
  13. Axure9元件库,如何自建,如何利用下载的元件库
  14. 1500个常用计算机单词
  15. 导航网/广告位/导航分类/可运营
  16. CAD图清晰打印设置
  17. 飞信linux下载文件,在Linux上安装飞信
  18. [MIT]微积分重点 第四课 指数函数(exponential) 学习笔记
  19. 加密excel总出现html,高手才懂的Excel技巧!为Excel加密的几种秘籍
  20. 计算机睡眠会影响游戏挂机吗,为什么很多人玩游戏的时候会挂机?断网是其一,过来人说出大实话...

热门文章

  1. VMware公司MKS连接Remote Console
  2. 快速提取过火区域,卫星影像评估西昌山火方法初探
  3. 康耐视visionpro工具-数据分析CogDataAnalysisTool
  4. excel在单元格中引用其他单元格里的内容
  5. 手机QQ公众号亿级消息实时群发架构
  6. 猎豹网校快速掌握 QTP 测试工具
  7. 人脸检测:《MTCNN》论文详解2016
  8. JS逆向 | 某美食优惠聚合平台
  9. ng-alain新版尝试
  10. 蚂蚁金服崔恒斌:金融智能——对话机器人新形态