/*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); }