linux进程通信(三)--FIFO

/*fifoserver.c:向FIFO中写入信息*/
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#define FIFO_SERVER "FIFO4"
main(int argc,char** argv)
{
	int fd=0;
	char w_buf[4096];
	int real_wnum;
	memset(w_buf,0,4096);
	if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|0666)<0)&&(errno!=EEXIST))
		printf("cannot create fifoserver\n");
	/*此处存在着打开依赖,即若没有读端打开FIFO的话,写端就阻塞在写端*/
	fd=open(FIFO_SERVER,O_WRONLY);
	if(fd==-1)
		printf("open error; no reading process\n");
	printf("%d\n",fd);
	
	real_wnum=write(fd,w_buf,2048);
	if(real_wnum==-1)
		printf("write to fifo error; try later\n");
	else 
		printf("real write num is %d\n",real_wnum);
	/*往FIFO写入的数据都是原子的,如果没有足够的空间,则会等待,而不是一点一点的写入。*/
	real_wnum=write(fd,w_buf,4096);
	if(real_wnum==-1)
		printf("write to fifo error; try later\n");
	else 
		printf("real write num is %d\n",real_wnum);
}
/*fifoclient.c:从FIFO中读出数据*/
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#define FIFO_SERVER "FIFO4"
main(int argc,char** argv)
{
	char r_buf[4096];
	int  fd;
	int  r_size;
	int  ret_size;
	r_size=atoi(argv[1]);
	memset(r_buf,0,sizeof(r_buf));
	fd=open(FIFO_SERVER,O_RDONLY);
	if(fd==-1)
	{
		printf("open %s for read error\n");
		exit(1);
	}
	printf("%d\n",fd);
	
	while(1)
	{
		ret_size=read(fd,r_buf,r_size);
		if(ret_size==-1)
			printf("no data avlaible\n");
		else
			printf("real read bytes %d\n",ret_size);
		sleep(1);
	}	
	unlink(FIFO_SERVER);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值