Linux下的有名管道---使用两个管道实现两个进程之间的通信(手机模式)
环境: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下的有名管道---使用两个管道实现两个进程之间的通信(手机模式)相关推荐
- Linux 进程及进程之间的通信机制——管道
参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...
- linux:进程之间的通信
ipc :进程间通信(InterProcess Communication) 1.管道 同一时间是单向的:父读子写,或父写子读 管道中的数据 ,读走就没了 参数是一个整型数的数组,数组的大小是两个 ...
- linux进程间的通信实验,linux实验进程之间的通信.doc
院 系: 计算机学院 实验课程:linux内核设计与实现 实验项目:进程之间的通信 指导老师:冯刚 开课时间: 2010 - 2011 年度第 2 学期 专 业:计算机科学与技术(师范) 班 级:2班 ...
- Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信
Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信 软件: Quartus II 17.0 芯片: ALTERA Cyclone5 5CG ...
- Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)
环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入. 步骤: 1.创建两个管道 ...
- linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道
环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 1.创建管道的时候,使用的函数:int mkfifo(const char *pathname, mode_t ...
- linux下的有名管道文件读写操作
前言说明: 宿主主机系统:window 7 旗舰版 虚拟机:VMware 10.0.4 操作平台:Ubuntu 12.04 本文代码在个人电脑可以运行,不确保在其他平台可以正确运行 这两天在学进程通信 ...
- linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...
方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...
- Linux下SVN服务器同时支持Apache的http和https及svnserve独立服务器三种模式且使用相同的访问权限账号...
1.在服务器上安装配置SVN服务: 2.配置SVN服务同时支持Apache的http和svnserve独立服务器两种模式访问: 3.Apache的http和svnserve独立服务器两种模式使用相同的 ...
最新文章
- vs2008中,在OCX控件中应用doc/view基本步骤
- 【python教程】对多线程中join()的详细教程
- RocketMQ的Consumer详解之push和pull模式(长轮询)
- 【数据结构】KMP算法(c语言)
- 怎么查看和获取SQL Server实例名
- 从留存的本质出发,制定留存策略
- cef 前进后台 实现_CefSpider: 一个基于Webkit,Cef框架构建爬虫,项目代号:“车风”,具备浏览器所有特性,欢迎你给我一个Star,你的Star是该项目前进的动力!...
- python保存csv_在python中修改和保存csv文件
- Python 简写操作(for、if简写、匿名函数)
- 基于JAVA+Servlet+JSP+MYSQL的校园门户信息管理系统
- 【推荐系统】智能推荐算法在直播场景中的应用
- win7下u盘安装ubuntu组成双系统
- Axure9元件库,如何自建,如何利用下载的元件库
- 1500个常用计算机单词
- 导航网/广告位/导航分类/可运营
- CAD图清晰打印设置
- 飞信linux下载文件,在Linux上安装飞信
- [MIT]微积分重点 第四课 指数函数(exponential) 学习笔记
- 加密excel总出现html,高手才懂的Excel技巧!为Excel加密的几种秘籍
- 计算机睡眠会影响游戏挂机吗,为什么很多人玩游戏的时候会挂机?断网是其一,过来人说出大实话...