FIFO通信的方式

/*fifl_read.c*/
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<sys/time.h>
#include<unistd.h>

#define FIFO "/tmp/myfifo" 

#define READ_DATA_LEN 4096

main(int argc,char** argv)
{
 char buf_r[READ_DATA_LEN];
 int nIndex = 0;
 int  fd;
 int  nread;
 int  nNum = 0;
 struct timeval tv;
 struct timezone tz;

/*创建有名管道,并设置相应的权限*/
 if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
  printf("cannot create fifoserver\n");
 printf("Preparing for reading bytes...\n");

 memset(buf_r,0,sizeof(buf_r));
/*打开有名管道,并设置非阻塞标志*/
 fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
 if(fd== -1)
 {
  perror("open");
  exit(1);
 }

 sleep(5);

 gettimeofday (&tv , &tz);
 printf("nIndex is %d, nNum = %d, tv_sec;TEST0 %d\n",nIndex, nNum, tv.tv_sec);
 printf("nIndex is %d,“nNum = %d, tv_usec;TEST0  %d\n",nIndex, nNum, tv.tv_usec);

 for(nIndex = 0; nNum < 1024 * 1024 * 1024; nIndex++) 
 {
  memset(buf_r,0,sizeof(buf_r));
  if((nread=read(fd,buf_r,READ_DATA_LEN)) <= 0){
//   if(errno==EAGAIN) 
//    printf("no data yet\n"); 
  }

  nNum += nread;
 }

 gettimeofday (&tv , &tz);
 printf("nIndex is %d,“nNumb = %d, tv_sec;TEST1 %d\n",nIndex, nNum, tv.tv_sec);
 printf("nIndex is %d,“nNumb = %d, tv_usec;TEST1 %d\n",nIndex, nNum, tv.tv_usec);

 pause();
 unlink(FIFO);
}


server.c

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO "/tmp/myfifo" 

#define WRITE_DATA_LEN 4096

main(int argc,char** argv)
/*参数为即将写入的字节数*/
{
 int nIndex = 1;
 int fd;
 char w_buf[WRITE_DATA_LEN];
 int nwrite;

/*打开FIFO管道,并设置非阻塞标志*/
 fd=open(FIFO,O_WRONLY|O_NONBLOCK,0);
 if(fd== -1)
  printf("open error; no reading process\n");
 if(argc==1)
  printf("Please send something\n");

 memset(w_buf, 1, sizeof(w_buf));

while(nIndex++)
{
/*向管道中写入字符串*/
 if((nwrite=write(fd,w_buf, WRITE_DATA_LEN))== -1)
 {
//              printf("write fifo failed!\n");
//      if(errno==EAGAIN) 
//      printf("The  FIFO  has  not  been  read  yet.Please  try  later\n"); 
 }
}
printf("Write FIFO nIndex is %d\n", nIndex);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值