#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读的数据