手动阀

Good Luck To You!

关于进程间通信的Linux小程序

在Linux系统中,进程间通信(IPC)是一种允许不同进程之间交换数据和信息的机制,常见的IPC方式包括管道、消息队列、共享内存、信号量和套接字等,下面是一个简单的示例程序,演示了如何使用管道进行进程间通信。

关于进程间通信的Linux小程序

这个示例程序包含两个部分:父进程和子进程,父进程创建一个管道,然后创建子进程,子进程通过管道向父进程发送一条消息,父进程读取并打印这条消息。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {
    int pipefd[2];  // 用于存储管道的文件描述符
    pid_t cpid;     // 子进程的PID
    char buf;       // 缓冲区,用于读取数据
    char message[] = "Hello from child process!";
    // 创建管道
    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }
    // 创建子进程
    cpid = fork();
    if (cpid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    if (cpid == 0) {    // 子进程
        close(pipefd[0]);  // 关闭读端
        write(pipefd[1], message, strlen(message));  // 写入消息到管道
        close(pipefd[1]);  // 关闭写端
        exit(EXIT_SUCCESS);
    } else {            // 父进程
        close(pipefd[1]);  // 关闭写端
        while (read(pipefd[0], &buf, 1) > 0) {  // 从管道读取数据
            write(STDOUT_FILENO, &buf, 1);  // 将数据写到标准输出
        }
        write(STDOUT_FILENO, "\n", 1);  // 换行
        close(pipefd[0]);  // 关闭读端
        wait(NULL);  // 等待子进程结束
        exit(EXIT_SUCCESS);
    }
}

代码解释:

1、创建管道:使用pipe(pipefd)函数创建一个管道,pipefd数组中保存了两个文件描述符,pipefd[0]用于读取,pipefd[1]用于写入。

2、创建子进程:使用fork()函数创建一个子进程,如果返回值为0,表示当前是子进程;否则是父进程。

3、子进程操作

关闭管道的读端pipefd[0]

关于进程间通信的Linux小程序

使用write()函数将消息写入管道的写端pipefd[1]

关闭写端pipefd[1]

4、父进程操作

关闭管道的写端pipefd[1]

使用read()函数从管道的读端pipefd[0]读取数据,并将其写到标准输出。

关于进程间通信的Linux小程序

关闭读端pipefd[0]

使用wait()函数等待子进程结束。

这个简单的示例展示了如何使用管道在父子进程之间传递消息,根据实际需求,可以选择其他IPC机制来实现更复杂的进程间通信。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

Copyright Your WebSite.Some Rights Reserved.