有名管道(创建实体文件)
Int mkfifo(const char* pathname,mode_t mode);
A:创建管道(mkfifo)-> 打开管道(open)-> 读写数据(read/write)-> 关闭管道(close)
-> 删除管道(unlink)
B:打开管道 -> 读写数据 -> 关闭管道
mkfifo写数据端:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
unlink("/tmp/fifo");
if(mkfifo("/tmp/fifo",0666))
{
perror("mkfifo");
return -1;
}
int fd = open("/tmp/fifo",O_WRONLY);
if(0 > fd)
{
perror("open");
return -1;
}
char buf[256] = {};
for(;;)
{
gets(buf);
write(fd,buf,sizeof(buf)+1);
printf("read:%s\n",buf);
}
close(fd);
unlink("/tmp/fifo");
}
mkfifo读数据端:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd = open("/tmp/fifo",O_RDONLY);
if(0 > fd)
{
perror("open");
return -1;
}
char buf[256] = {};
for(;;)
{
read(fd,buf,sizeof(buf));
printf("read:%s\n",buf);
}
close(fd);
}