码迷,mamicode.com
首页 > 系统相关 > 详细

进程通信之管道通信

时间:2016-06-19 11:33:21      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

编写两个程序,一个程序是对管道的写数据、另一个是对管道的读数据。

有名管道的创建mkfifo

技术分享

 

 

读数据:fifo_read.c

/* fifo_read.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MYFIFO    "/tmp/myfifo"    /* 有名管道文件名 */
#define MAX_BUFFER_SIZE    PIPE_BUF    /* 定义在limits.h中 */

int main()
{
    char buff[MAX_BUFFER_SIZE];
    int fd;
    int nread;

    /* 判断有名管道是否已存在,若尚未创建,则以相应的权限创建 */
    if(access(MYFIFO, F_OK) == -1)
    {
        if((mkfifo(MYFIFO, 0666) < 0) && (errno != EEXIST))
        {
            printf("Cannot create fifo file\n");
            exit(1);
        }
    }

    /* 以只读阻塞方式打开有名管道 */
    fd = open(MYFIFO, O_RDONLY);
    if(fd == -1)
    {
        printf("Open fifo file error\n");
        exit(1);
    }
    
    while(1)
    {
        memset(buff, 0, sizeof(buff));
        if((nread = read(fd, buff, MAX_BUFFER_SIZE)) > 0)
        {
            printf("Read ‘%s‘ from FIFO\n",buff);
        }
    }
    close(fd);
    exit(0);
}

写数据:

 

/* fifo_write.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MYFIFO    "/tmp/myfifo"    /* 有名管道文件名 */
#define MAX_BUFFER_SIZE    PIPE_BUF    /* 定义在limits.h中 */

int main(int argc, char* argv[])    /* 参数为即将写入的字符串 */
{
    int fd;
    char buff[MAX_BUFFER_SIZE];
    int nwrite;

    if(argc <= 1)
    {
        printf("Usage: ./fifo_write string\n");
        exit(1);
    }
    sscanf(argv[1], "%s", buff);
    
    /* 以只写阻塞方式打开FIFO管道 */
    fd = open(MYFIFO, O_WRONLY);
    if(fd == -1)
    {
        printf("Open fifo file error\n");
        exit(1);
    }

    /* 向管道中写入字符串 */
    if((nwrite = write(fd, buff, MAX_BUFFER_SIZE)) > 0)
    {
        printf("Write ‘%s‘ to FIFO\n",buff);
    }
    close(fd);
    return 0;
}

 

进程通信之管道通信

标签:

原文地址:http://www.cnblogs.com/yihujiu/p/5597535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!