【发布时间】:2016-04-22 21:34:58
【问题描述】:
我正在使用 linux 作为操作系统,并尝试使用管道和文件通信三个进程。它应该适用于放在 STDIN 上的任何文件。 管道工作得很好,但是第二个进程无法将一个字符正确写入文件或第三个读取。 首先,当然我将函数初始化为 semlock 和 semunlock 并且打开管道也在那里。感谢任何帮助,因为我不知道。
if (!(PID[1] = fork ())) {
int BUF_SIZE = 4096;
char d[BUF_SIZE];
while (fgets (d, BUF_SIZE, stdin) != NULL) {
write (mypipe[1], &d, BUF_SIZE);
}
}
if (!(PID[2] = fork ())) {
int reading_size = 0;
char r;
close (mypipe[1]);
semlock (semid1);
while (reading_size = read (mypipe[0], &r, 1)) {
if ((file = fopen ("proces2.txt", "w")) == NULL) {
warn ("error !!!");
exit (1);
}
fputc (r, file);
fclose (file);
semunlock (semid2);
}
}
if (!(PID[3] = fork ())) {
char x;
semlock (semid2);
do {
if ((plikProces3 = fopen ("proces2.txt", "r")) == NULL) {
warn ("Blad przy otwarciu pliku do odczytu !!!");
exit (1);
}
i = getc (plikProces3);
o = fprintf (stdout, "%c", i);
fclose (plikProces3);
semunlock (semid1);
} while (i != EOF);
}
【问题讨论】: