在C语言中实现管道通信可以通过使用 pipe()
函数来创建管道,fork()
函数来创建子进程,并使用 read()
和 write()
函数来进行通信。以下是一个简单的示例代码,展示如何在父子进程之间通过管道通信。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd[2];
pid_t pid;
char write_msg[] = "Hello from parent";
char read_msg[100];
// 创建管道
if (pipe(fd) == -1) {
perror("pipe failed");
return 1;
}
// 创建子进程
pid = fork();
if (pid < 0) {
perror("fork failed");
return 1;
}
if (pid > 0) { // 父进程
close(fd[0]); // 关闭读端
write(fd[1], write_msg, strlen(write_msg) + 1);
close(fd[1]); // 关闭写端
} else { // 子进程
close(fd[1]); // 关闭写端
read(fd[0], read_msg, sizeof(read_msg));
printf("Received message: %sn", read_msg);
close(fd[0]); // 关闭读端
}
return 0;
}
代码解释:
- 创建管道:
pipe(fd)
创建一个管道,并将其文件描述符保存在fd
数组中。fd[0]
是管道的读端,fd[1]
是管道的写端。 - 创建子进程:
fork()
创建一个新进程。如果fork()
返回的值是 0,则表示这是在子进程中。如果返回一个正值,则是在父进程中。 - 父进程写入消息: 在父进程中,关闭管道的读端 (
fd[0]
),然后通过写端 (fd[1]
) 写入消息。 - 子进程读取消息: 在子进程中,关闭管道的写端 (
fd[1]
),然后通过读端 (fd[0]
) 读取消息,并打印出来。
这样,父进程和子进程就可以通过管道进行通信。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/192094.html