linux 双向fifo

注意open打开fifo的方式, 有阻塞和非阻塞模式

如果读阻塞模式打开, 那么要等到一个进程写入fifo之后, 这个读open才会打开

 

1 客户端




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

#define	FIFO1	"/tmp/fifo.3"
#define	FIFO2	"/tmp/fifo.4"
#define	MAXLINE		4096

void  client(int readfd, int writefd)
{
	size_t	len;
	ssize_t	n;
	char	buff[MAXLINE]="hello this is client";
  
      write(writefd, buff,strlen(buff));
      
	/* 4read from IPC, write to standard output */
	while ( (n = read(readfd, buff, MAXLINE)) > 0)
	{
      
    }
}

int main(int argc, char **argv)
{
	int		readfd, writefd;
    char buff[MAXLINE]="hello this is client";
   
		/* 4create two FIFOs; OK if they already exist */
	if ((mkfifo(FIFO1, 0666) < 0)){

        perror("文件创建失败");

    }
		printf("after open\n");
	if ((mkfifo(FIFO2, 0666) < 0)) {

        perror("文件创建失败");

	}

	readfd = open(FIFO1, O_RDONLY);
	writefd = open(FIFO2, O_WRONLY);
   
	client(readfd, writefd);
	exit(0);
}

2 服务器


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

#define	FIFO1	"/tmp/fifo.3"
#define	FIFO2	"/tmp/fifo.4"
#define	FILE_MODE	(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
#define	MAXLINE		4096

void server(int readfd, int writefd)
{
	int		fd;
	ssize_t	n;
	char	buff[MAXLINE+1];
			/* 4open succeeded: copy file to IPC channel */
		while ( (n = read(readfd, buff, MAXLINE)) > 0)
        {
           write(STDOUT_FILENO, buff,n);
        }
}

int main(int argc, char **argv)
{
	int		readfd, writefd;

		/* 4create two FIFOs; OK if they already exist */
	if ((mkfifo(FIFO1, 0666) < 0)){

        perror("文件创建失败");

    }
		
	if ((mkfifo(FIFO2, 0666) < 0)) {

        perror("文件创建失败");
   
	}

	writefd = open(FIFO1, O_WRONLY );
	readfd = open(FIFO2,O_RDONLY );

	server(readfd, writefd);
	exit(0);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值