Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)
环境: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;
}
#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
这样就实现了两个进程之间的自由通信了。
需要特别注意的是,一个管道的一端,如果确定是读取的操作,那么就不能写入;同理,如果确定是写入的操作,就不能读取。
PS:根据传智播客视频学习整理得出。
Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)相关推荐
- Linux下安装Docker,报错docker: unrecognized service的两种解决方案
Linux下安装Docker,报错docker: unrecognized service的两种解决方案 参考文章: (1)Linux下安装Docker,报错docker: unrecognized ...
- Linux 进程及进程之间的通信机制——管道
参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...
- linux:进程之间的通信
ipc :进程间通信(InterProcess Communication) 1.管道 同一时间是单向的:父读子写,或父写子读 管道中的数据 ,读走就没了 参数是一个整型数的数组,数组的大小是两个 ...
- linux进程间的通信实验,linux实验进程之间的通信.doc
院 系: 计算机学院 实验课程:linux内核设计与实现 实验项目:进程之间的通信 指导老师:冯刚 开课时间: 2010 - 2011 年度第 2 学期 专 业:计算机科学与技术(师范) 班 级:2班 ...
- Linux下的有名管道---使用两个管道实现两个进程之间的通信(手机模式)
环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 对讲机模式:一个进程输入完成一句话,必须等待第二个进程输入完成一句话之后才能再次输入. 步骤: 1.创建两个管道 ...
- linux下的有名管道文件读写操作
前言说明: 宿主主机系统:window 7 旗舰版 虚拟机:VMware 10.0.4 操作平台:Ubuntu 12.04 本文代码在个人电脑可以运行,不确保在其他平台可以正确运行 这两天在学进程通信 ...
- Linux下QProcess不产生finished信号、waitforfinished阻塞超时【defunct进程】
文章目录 项目场景: 问题描述以及分析过程: defunct(僵尸进程): QProcess的实现: 理论原因: 尝试修改一: 第一次痛定思痛: 尝试修改二: 第二次修改能满足要求: 使用startd ...
- oracle EBS查进程,Linux下使用ps命令来查看Oracle DB以及EBS相关的进程
Linux下可以使用ps命令来查看Oracle相关的进程 使用ps来查看Oracle数据库相关的服务 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [or ...
- linux创建管道的函数,Linux下的有名管道(03)---使用函数创建和删除有名管道
环境:Vmware Workstation:CentOS-6.4-x86_64 说明: 1.创建管道的时候,使用的函数:int mkfifo(const char *pathname, mode_t ...
最新文章
- 远程连接服务器的方法:
- mybatis02--增删改查
- USACO1.1.2|贪婪的送礼者
- oracle 数据库新建实例导入数据
- 345所开设人工智能本科专业高校名单大全
- linux查询用过的历史命令,在linux中,怎麼查看系统的版本,怎麼查看自己用过的历史命令...
- Intel Edison学习笔记(二)—— 入门环境配置
- C和指针---读书笔记16
- 优分享VR开源啦,优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件...
- PHP实现微信网页登陆授权开发
- JDBC个人学习总结
- 基于Python绘制一个摸鱼倒计时界面
- python股票技术指标计算,python股票量化交易(3)---趋势类指标MACD
- 天池大数据比赛-菜鸟仓库比赛-第二赛季记录
- 计算机电源选平衡,电脑里选择电源计划哪个好
- Python中的模块2
- 超过3万Mac已感染 “银麻雀”病毒 最新m1芯片也中招
- Scriptalert(“玄猫啊玄猫,玄猫要高考咯”)/script
- 艾艾贴关于Spring Cloud大型互联网分布式企业微服务云架构
- 【JavaWeb - 网页编程】一 HTML技术与CSS技术
热门文章
- linux复制分区表信息,parted分区
- AGX Xavier 35.1.0 enable pps 过程全记录
- java开发微信抢红包挂_Java 实现仿照微信抢红包算法,实测结果基本和微信吻合,附demo...
- HTML+CSS之找茬
- pythonsave函数_Python常用功能函数
- HAVING用法详解
- 解决孩子上课走神的好办法,99%的家长还不知道!
- 西子凌波回复集3(网友整理版)
- JS 将 string 转换成为 number
- 找对方法,一年顶十年