现在的位置: 首页 > 综合 > 正文

有名管道

2017年12月26日 ⁄ 综合 ⁄ 共 1348字 ⁄ 字号 评论关闭

fifo_write.c

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO_SERVER "/tmp/myfifo"

int main(int argc, char** argv)
{
    int fd; 
    char w_buf[100];
    int nwrite;
    fd=open(FIFO_SERVER, O_WRONLY|O_NONBLOCK, 0); 
    if (argc==1)
        printf("please send something\n");
    strcpy(w_buf, argv[1]);
    if ((nwrite=write(fd, w_buf, 100))==-1)
    {   
        if (errno==EAGAIN)
            printf("The FIFO has not been read yet. please try later\n");
    }   
    else
    {   
        printf("写入 \"%s\" 到管道\n", w_buf);
    }   
    return 0;
}

fifo_read.c

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIFO "/tmp/myfifo"

int main(int argc, char**argv)
{
    char    buf_r[100];
    int fd; 
    int nread;

    if ((mkfifo(FIFO, O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
        printf("can not create fifo server\n");
    printf("preparing for reading bytes...\n");
    memset(buf_r, 0, sizeof(buf_r));
    fd=open(FIFO, O_RDONLY|O_NONBLOCK, 0); 
    if (fd==-1)
    {   
        perror("open");
        exit(1);
    }   

    while(1)
    {   
        memset(buf_r, 0, sizeof(buf_r));
        if ((nread=read(fd, buf_r, 100))==-1)
        {   
            if (errno==EAGAIN)
                printf("no data yet\n");
        }   
        printf("读:\"%s\" 从管道中\n", buf_r);
        sleep(1);
    }   
    pause();
    unlink(FIFO);
    return 0;
}

编译命令:

cc fifo_write.c -o cli -g

cc fifo_read.c -o sev -g

启动读管道:

./sev

启动写管道:

./cli xxx

【上篇】
【下篇】

抱歉!评论已关闭.