linux-----FIFO匿名管道实现无血缘进程间通信

该博客介绍了如何在Linux环境中利用FIFO(匿名管道)实现无血缘关系的进程间通信。通过两个源文件示例,一个用于创建FIFO并写入数据,另一个则负责读取数据。在实际运行时,首先运行写入文件的应用程序,然后运行读取文件的应用程序,即可观察到完整的通信过程。此外,写入文件的代码包含了一些额外的输出,用于展示在阻塞模式下的通信行为。
摘要由CSDN通过智能技术生成

两个源文件,一个创建fifo文件并向其中写入,另一个往外读。

写文件:

/*********Ii****************************************************************
	> File Name: fifo_test_01.c
	> Author: xuchen_allen
	> Mail: xuchen_allen@163.com 
	> Created Time: 2019年02月01日 星期五 17时58分03秒
 ************************************************************************/

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>


//fifo 匿名管道基础运用:
//这个源文件是创建一个fifo_file文件,并向其中写入数据;

int main(void)
{
	pid_t pid;
	printf("\nthis process is NO %d\n",getpid());

	char *buf[2048];
	//创建一个fifo file 文件
	int ret=0;
	if((ret=mkfifo("fifo_test",0644))<0){
		perror("mkfifo fail");
		exit(1);
	}
	printf("ret=%d\n",ret);
	//打开一个文件:
	int data_fd;
	data_fd=open("test",O_RDONLY);
	if(data_fd<0){
		perror("open fail;");
		exit(1);
	}
	printf("data_fd=%d\n,",data_fd);
	
	//打开fifo文件:
//	int fifo_fd=open("fifo_test",O_WRONLY|O_NONBLOCK);	printf("fifo_fd=%d",fifo_fd);//非阻塞的直接返回-1;
    int fifo_fd=open("fifo_test",O_WRONLY);
//	printf("fifo_fd=%d",fifo_fd);	
	if(fifo_fd<0){
		perror("open fifo fail:");
		exit(1);
	}
	printf("fifo_fd=%d\n",fifo_fd);

	//从data_fd中读出数据,写入fifo_fd中:
	int n=read(data_fd,buf,2048);
	if(n<0){
		perror("read fail:");
		exit(1);
	}
	printf("n=%d\n",n);
	
	if(write(fifo_fd,buf,n)<0){
		perror("write fail");
		exit(1);
	}

	/*
	if(write(STDOUT_FILENO,buf,n)<0){
		perror("asd");
		exit(1);
	}
	*/
	close(data_fd);
	close(fifo_fd);


	exit(0);
}
	

读文件:

/*************************************************************************
	> File Name: fifo_test_01_read.c
	> Author: xuchen_allen
	> Mail: xuchen_allen@163.com 
	> Created Time: 2019年02月01日 星期五 19时56分38秒
 ************************************************************************/

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

//读取之前创建的fifo_test文件:


int main(void)
{
	pid_t pid;
	int fifo_fd;
	char *buf[2048];
	
	printf("\nasdasdasdasd");

	//标准输出打印出来:
	
	fifo_fd = open("fifo_test",O_RDONLY);
	
	//将写入fifo的数据读取出来:
	int n = read(fifo_fd,buf,2048);
	
	//输出到屏幕上:
	printf("\n");
	write(STDOUT_FILENO,buf,n);

	printf("\nthe process is NO %d\n",getpid());

	close(fifo_fd);



	exit(0);
}

在执行时,先:

./write_app &

再:

./read_app &

就能看到全部输出。

另外,写文件里加了一些额外输出,可以看到阻塞mode下的情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值