打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Linux之命名管道
多进程编程通信——管道
进程通信—管道
Linux系统管道和有名管道的通信机制
有名管道
Linux的进程通讯之命名管道
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服