zoukankan      html  css  js  c++  java
  • 进程通信之管道通信

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

    有名管道的创建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
    ");
                exit(1);
            }
        }
    
        /* 以只读阻塞方式打开有名管道 */
        fd = open(MYFIFO, O_RDONLY);
        if(fd == -1)
        {
            printf("Open fifo file error
    ");
            exit(1);
        }
        
        while(1)
        {
            memset(buff, 0, sizeof(buff));
            if((nread = read(fd, buff, MAX_BUFFER_SIZE)) > 0)
            {
                printf("Read '%s' from FIFO
    ",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
    ");
            exit(1);
        }
        sscanf(argv[1], "%s", buff);
        
        /* 以只写阻塞方式打开FIFO管道 */
        fd = open(MYFIFO, O_WRONLY);
        if(fd == -1)
        {
            printf("Open fifo file error
    ");
            exit(1);
        }
    
        /* 向管道中写入字符串 */
        if((nwrite = write(fd, buff, MAX_BUFFER_SIZE)) > 0)
        {
            printf("Write '%s' to FIFO
    ",buff);
        }
        close(fd);
        return 0;
    }
  • 相关阅读:
    spark 安装
    maven 常用配置
    矩阵SVD在机器学习中的应用
    机器学习—单变量线性回归
    Stanford机器学习
    Memcached 安装和客户端配置
    Lucene 学习之二:数值类型的索引和范围查询分析
    Go-errors第三方包学习
    Go日志库使用-logrus
    Go语言---小白入门-命令行库Cobra的使用
  • 原文地址:https://www.cnblogs.com/yihujiu/p/5597535.html
Copyright © 2011-2022 走看看