有名管道FIFO实例

 

#include <sys/stat.h>

int mkfifo(const char *name, mode_t mode);

mkfifo用于创建有名管道,其他的对有名管道的其他操作与文件操作类似

1.创建管道: 

#define FIFO "/root/Desktop/data.fifo"  /*最好是使用绝对路径,使用相对路径的话,你的文件要都在同一个文件夹下*/
int main(void)
{
  if(mkfifo(FIFO,0666)) /*#include <sys/stat.h>*/
  {
   perror("fifo");
   return -1;
  }
  return EXIT_SUCCESS;
}

2.向管道写数据:

#define FIFO "/root/Desktop/data.fifo"
#define BUFSIZE 4096
int main(void)
{
 char line[BUFSIZE];
 memset(line,0,BUFSIZE); /*#include <string.h>*/
 int fd_fifo;
 if(mkfifo(FIFO,0666)!=0)/*#include <sys/stat.h>*/
 {
  perror("fifo");
 }
 if((fd_fifo=open(FIFO,O_RDWR))==-1) /*#include <fcntl.h>*/
 {
  perror("open");/*#include <stdio.h>*/
 }
 while(fgets(line,BUFSIZE,stdin)!=NULL)/*#include <stdio.h>*/
 {
  if(write(fd_fifo,line,strlen(line))<0)/*#include <unistd.h>*/
  {
   perror("write");
  }
 }

 return EXIT_SUCCESS;
}

 

 

3.从管道里读数据:

#define FIFO "/root/Desktop/data.fifo"
#define BUFSIZE 4096
int main(void)
{

 char line[BUFSIZE];
 memset(line,0,BUFSIZE);
 int fd_fifo;
 if(mkfifo(FIFO,0666)!=0)/*#include <sys/stat.h>*/
 {
  perror("fifo");
 }
 if((fd_fifo=open(FIFO,O_RDWR))==-1) /*#include <fcntl.h>*/
 {
  perror("open");/*#include <stdio.h>*/
 }

 while(1)
 {
  if(read(fd_fifo,line,BUFSIZE)==-1)
  {
   perror("read");
  }
  printf("read fifo data:%s\n",line);
  sleep(1);
 }

 return EXIT_SUCCESS;
}

先运行程序1,创建有名管道

接着运行程序3,从管道里读数据,因为管道里还没有程序,所以该程序会阻塞在read()那里

最后运行程序2,相管道写数据,每当写完数据的时候,程序3可以程序2读的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值