FIFO通信的方式

来源:互联网 发布:如何使用大数据 编辑:程序博客网 时间:2024/05/10 22:18
/*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 4096main(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 4096main(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);}