c/c++ 里的进程间通信 , 管道 pipe 编程举例

(1)以下是一个网上的使用 pipe 编程的范例:

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
    int pipefd[2];
    pid_t pid;
    char writeMsg[] = "Hello from parent process!";
    char readMsg[100];

    // 创建管道
    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    // 创建子进程
    pid = fork();
    if (pid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if (pid > 0) { // 父进程
        close(pipefd[0]); // 关闭读取端

        // 向管道写入消息
        write(pipefd[1], writeMsg, strlen(writeMsg) + 1); // +1 是为了包含终止符 '\0'
        close(pipefd[1]); // 写入完成后关闭写入端

        wait(NULL);       // 等待子进程结束
    }
     else  { // 子进程
        close(pipefd[1]); // 关闭写入端

        // 从管道读取消息
        ssize_t numBytes = read(pipefd[0], readMsg, sizeof(readMsg) - 1);
        if (numBytes == -1) {
            perror("read");
            exit(EXIT_FAILURE);
        }
        readMsg[numBytes] = '\0'; // 添加字符串终止符

        // 打印读取的消息
        printf("Received message: %s\n", readMsg);
        close(pipefd[0]); // 读取完成后关闭读取端
    }

    return 0;
}

(2)上面引用了 wait() 函数,给出其定义:

(3)再给出 linux 0.11 里很重要的管道文件的创建源码:

(4)文件都对应 inode 节点,接着给出文件描述符 ,file 文件结构 ,inode 节点结构的定义与关联关系:

(5)读写管道,主要依赖于 linux 0.11 系统的这俩系统函数:

(6)给出我自己的简单版的 实验结果:

(7)

谢谢

相关推荐
老四啊laosi4 小时前
[C++进阶] 24. 哈希表封装unordered_map && unordered_set
c++·哈希表·封装·unordered_map·unordered_set
妙为4 小时前
银河麒麟V4下编译Qt5.12.12源码
c++·qt·国产化·osg3.6.5·osgearth3.2·银河麒麟v4
weixin_446023565 小时前
C语言:面向过程、应用底层开发、跨平台的通用程序设计语言
c语言·跨平台·数据类型·底层开发·面向过程
无敌昊哥战神7 小时前
深入理解 C 语言:巧妙利用“0地址”手写 offsetof 宏与内存对齐机制
c语言·数据结构·算法
史迪仔01128 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
cmpxr_9 小时前
【C】数组名、函数名的特殊
c语言·算法
会编程的土豆9 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
低频电磁之道9 小时前
解决 Windows C++ DLL 导出类不可见的编译错误
c++·windows
itman30110 小时前
C语言怎么学?从写程序到玩指针的实操攻略
c语言·指针·结构体·编程学习·资源推荐
君义_noip11 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s