#有名管道之间的通信
//1. 创建有名管道
//2. 本进程执行循环等待数据被写入到管道中并读有名管道
//3. 打开有名管道并写数据到名管道
//create_fifo.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
int main(int argc,char **argv)
{
if(argc<2)
{
fprintf(stdout,"Usage:%s<filename>\n",argv[0]);
exit(-1);
}
if(mkfifo(argv[1],0644)<0)
{
fprintf(stderr,"mkfifo()failed:%s\n",strerror(errno));
exit(-1);
}
return 0;
}//xieguandao.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(int argc,char **argv)
{
int fd;
if(argc<2)
{
fprintf(stdout,"Usage:%s<filename>\n",argv[0]);
exit(-1);
}
if((fd=open(argv[1],O_WRONLY))<0)
{
fprintf(stderr,"open fifo %s for writtinng failed:%s\n",argv[1],strerror(errno));
exit(-1);
}
fprintf(stdout,"open fifo %s for writting successed.\n",argv[0]);
char buffer[BUFFER_SIZE];
ssize_t n;
while(fgets(buffer,BUFFER_SIZE,stdin))
{
if((n=write(fd,buffer,strlen(buffer)+1))<0)
{
fprintf(stderr,"write()failed on fifo:%s\n",strerror(errno));
break;
}
}
return 0;
}//duguandao.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(int argc,char **argv)
{
int fd;
if(argc<2)
{
fprintf(stdout,"Usage:%s<filename>\n",argv[0]);
exit(-1);
}
if((fd=open(argv[1],O_RDONLY))<0)
{
fprintf(stdout,"open fifo %s for reading failed:%s\n",argv[1],strerror(errno));
exit(-1);
}
fprintf(stdout,"open fifo %s reading successed.\n",argv[0]);
char buffer[BUFFER_SIZE];
ssize_t n;
while(1)
{
if((n=read(fd,buffer,BUFFER_SIZE))<0)
{
fprintf(stderr,"read failed on %s:%s\n",argv[1],strerror(errno));
exit(-1);
}
else if(n==0)
{
fprintf(stderr,"peer closed fifo.\n");
break;
}
else
{
fprintf(stdout,"%s\n",buffer);
}
}
return 0;
}
阿里巴巴灵犀互娱公司福利 649人发布
查看17道真题和解析