#有名管道之间的通信

//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;
}
全部评论

相关推荐

故事和酒66:感觉够用了佬ps资格证书多了一行,最好精简成一面,hr看不了那么多字
点赞 评论 收藏
分享
09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务