Linux下编写一个c语言程序,要求如下,该程序包含三个进程,分别是进程一,进程二和进程三,还包括两个管道,管道一和管道二。进程一负责从data.txt中取数据,并将所有数据放到管道一中,注意,data.txt中的数据都是整型数据。进程二负责从管道一中取出数据,并且将所有数加1,将新产生的数据放到管道二中,进程三负责从管道二中读数据,并输出在用户屏幕上。给出具体的代码
时间: 2024-03-26 11:36:04 浏览: 30
代码下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BUF_SIZE 10
int main()
{
int fd1[2], fd2[2];
pid_t pid1, pid2;
char buf[BUF_SIZE];
if (pipe(fd1) < 0 || pipe(fd2) < 0) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid1 = fork();
if (pid1 < 0) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid1 == 0) { // child process 1
close(fd1[0]); // close read end of pipe 1
FILE *fp = fopen("data.txt", "r");
int num;
while (fscanf(fp, "%d", &num) != EOF) {
write(fd1[1], &num, sizeof(int));
}
close(fd1[1]); // close write end of pipe 1
exit(EXIT_SUCCESS);
} else { // parent process
pid2 = fork();
if (pid2 < 0) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid2 == 0) { // child process 2
close(fd1[1]); // close write end of pipe 1
close(fd2[0]); // close read end of pipe 2
int num;
while (read(fd1[0], &num, sizeof(int)) > 0) {
num += 1;
write(fd2[1], &num, sizeof(int));
}
close(fd1[0]); // close read end of pipe 1
close(fd2[1]); // close write end of pipe 2
exit(EXIT_SUCCESS);
} else { // parent process
close(fd1[0]); // close read end of pipe 1
close(fd2[1]); // close write end of pipe 2
int num;
while (read(fd2[0], &num, sizeof(int)) > 0) {
printf("%d ", num);
}
printf("\n");
close(fd2[0]); // close read end of pipe 2
waitpid(pid1, NULL, 0);
waitpid(pid2, NULL, 0);
}
}
return 0;
}
```
程序中使用了两个管道,分别是管道一和管道二,用于进程间通信。首先父进程创建了这两个管道,然后创建了两个子进程,分别是进程一和进程二。进程一从 data.txt 中读取整数数据,写入管道一中;进程二从管道一中读取数据,加 1 后写入管道二中;进程三从管道二中读取数据,输出到屏幕上。最后,父进程等待两个子进程结束。
阅读全文