#有名管道之间的通信

//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;
}

注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-15 10:17
厦门大学_2023
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议