linux1.利用无名管道通信编写程序实现命令cat的功能。
时间: 2024-05-06 19:16:40 浏览: 127
jincheng.zip_管道通信
下面是一个使用无名管道通信实现cat命令的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define BUFFER_SIZE 1024
int main(int argc, char *argv[])
{
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);
}
if (pid == 0) { // 子进程
close(pipefd[1]); // 关闭写端
while (read(pipefd[0], buffer, BUFFER_SIZE) > 0) { // 从管道读取数据并输出
printf("%s", buffer);
}
close(pipefd[0]); // 关闭读端
_exit(EXIT_SUCCESS);
} else { // 父进程
close(pipefd[0]); // 关闭读端
while (fgets(buffer, BUFFER_SIZE, stdin)) { // 从标准输入读取数据并写入管道
write(pipefd[1], buffer, strlen(buffer));
}
close(pipefd[1]); // 关闭写端
wait(NULL); // 等待子进程结束
exit(EXIT_SUCCESS);
}
}
```
该程序创建一个无名管道,然后创建一个子进程。子进程从管道读取数据并输出,父进程从标准输入读取数据并写入管道。通过这种方式,父进程将数据传递给子进程,子进程再输出到标准输出。这就实现了类似于cat命令的功能。
阅读全文