首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C fork/exec,带有非阻塞管道IO

首先,我们需要了解C语言中的fork()和exec()函数。fork()函数用于创建一个新的进程,而exec()函数用于在当前进程中执行一个新的程序。在C语言中,我们可以使用fork()和exec()函数来实现进程间通信。

下面是一个简单的示例代码,展示了如何使用fork()和exec()函数来实现进程间通信:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    int pipefd[2];
    pid_t pid;
    char buffer[1024];

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

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

    if (pid == 0) {
        // 子进程
        close(pipefd[1]); // 关闭写端
        read(pipefd[0], buffer, sizeof(buffer)); // 从管道中读取数据
        printf("Child process received: %s\n", buffer);
        close(pipefd[0]); // 关闭读端
        exit(EXIT_SUCCESS);
    } else {
        // 父进程
        close(pipefd[0]); // 关闭读端
        write(pipefd[1], "Hello, child process!", sizeof("Hello, child process!")); // 向管道中写入数据
        close(pipefd[1]); // 关闭写端
        wait(NULL); // 等待子进程结束
        printf("Parent process sent message to child process.\n");
        exit(EXIT_SUCCESS);
    }
}

在这个示例代码中,我们首先创建了一个管道,然后使用fork()函数创建了一个子进程。子进程负责从管道中读取数据,而父进程负责向管道中写入数据。最后,父进程等待子进程结束,并输出一条消息。

需要注意的是,这个示例代码中的管道是阻塞的,即当子进程正在读取数据时,父进程会被阻塞,直到子进程读取完毕。如果需要实现非阻塞的管道IO,可以使用select()函数来监控管道的状态,以实现非阻塞的读写操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券