使用c语言编写程序无名管道进行进程间通讯,可以连续输入和输出
时间: 2024-02-23 10:57:54 浏览: 83
可以的,下面是一个简单的使用无名管道进行进程间通讯的C语言程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main() {
int pipefd[2];
char buffer[BUFFER_SIZE];
// 创建无名管道
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
// 创建子进程
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0) {
// 子进程,关闭管道的写端
close(pipefd[1]);
// 从管道中读取数据并输出
while (read(pipefd[0], buffer, BUFFER_SIZE) > 0) {
printf("Received message: %s", buffer);
}
// 关闭读端
close(pipefd[0]);
exit(EXIT_SUCCESS);
}
else {
// 父进程,关闭管道的读端
close(pipefd[0]);
// 向管道中写入数据
while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) {
write(pipefd[1], buffer, strlen(buffer) + 1);
}
// 关闭写端
close(pipefd[1]);
exit(EXIT_SUCCESS);
}
return 0;
}
```
在这个示例程序中,先使用pipe()函数创建了一个无名管道,然后使用fork()函数创建了一个子进程。在子进程中,关闭了管道的写端,通过循环从管道中读取数据并输出。在父进程中,关闭了管道的读端,通过循环从标准输入中读取数据并写入到管道中。需要注意的是,在使用管道进行通讯时,需要保证读写端的正确关闭,否则会造成阻塞。
阅读全文