zoukankan      html  css  js  c++  java
  • (FIFO)有名管道在无亲缘进程间的通信

    原文地址:

    两个程序,一写一读,测试有名管道在无亲缘关系的进程间的通信:

    读管道程序:main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <sys/types.h>

    #define FIFO_NAME "myfifo"
    #define BUF_SIZE 1024

    int main(void) {
    int fd;
    char buf[BUF_SIZE];

    umask(0);
    fd = open(FIFO_NAME, O_RDONLY);
    read(fd, buf, BUF_SIZE);
    printf("Read content: %s\n", buf);
    close(fd);
    exit(0);
    }



    写管道程序:client.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <string.h>

    #define FIFO_NAME "myfifo"
    #define BUF_SIZE 1024

    int main(void) {
    int fd;
    char buf[BUF_SIZE] = "Hello procwrite, I come from process named procread!";

    umask(0);

    if (mkfifo(FIFO_NAME, S_IFIFO | 0666) == -1) {
    perror("mkfifo error!");
    exit(1);
    }


    if ((fd = open(FIFO_NAME, O_WRONLY)) == -1) { 判断是否有打开fifo
    perror("open error!");
    exit(1);
    }


    write(fd, buf, strlen(buf) + 1); /*strlen(buf)+1 是把'\0'也写过去*/

    close(fd);
    //unlink(FIFO_NAME); 删除fifo文件

    exit(0);
    }



    Makefile

    all:main
    main:
    gcc -g -Wall -O0 main.c -o main

    client:
    gcc -g -Wall -O0 client.c -o client

    clean:
    rm *.o main client




    运行及输出
    编译后,先运行 client ( 运行后处于阻塞状态 ) 
    打开另一个终端运行 main 程序,输出:引用

    Read content: Hello procwrite, I come from process named procread!

  • 相关阅读:
    面试题21 包含min函数的栈
    面试题20 顺时针打印矩阵
    基于熵的方法计算query与docs相似度
    使用信息检索和深度学习方法的智能对话
    常用的激活函数
    spark实现smote近邻采样
    wide&deep用于ltr排序
    deepfm用于ltr排序
    lightgbm用于排序
    静态工厂方法+服务提供者框架模板
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2287445.html
Copyright © 2011-2022 走看看