我想將輸出重定向printf到管道,但由于某種原因它似乎不起作用。什么作業正在使用write。
這是我的程式
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char **argv) {
int fd[2];
pipe(fd);
pid_t id = fork();
if (id < 0) {
fprintf(stderr, "Error while forking #1!");
exit(1);
} else if (id == 0) {
dup2(fd[0], STDIN_FILENO);
close(fd[1]);
char msg[200];
read(STDIN_FILENO, msg, 200);
fprintf(stderr, "received message: %s", msg);
} else {
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
char msg[] = "Hello from parent!\n";
write(STDOUT_FILENO, msg, strlen(msg));
/* printf("%s",msg); */
while(wait(NULL)>0);
}
exit(EXIT_SUCCESS);
}
如果我write用注釋行替換,我的程式就會阻塞
uj5u.com熱心網友回復:
按照 Barmar 的建議,在輸出中添加換行符 (\n) 或使用 fflush():
fprintf(stderr, "fork #1 時出錯!\n");
要么
fprintf(stderr, "分叉 #1 時出錯!"); fflush(標準錯誤);
順便說一句,它已收到,未收到;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/449999.html
上一篇:C中兩個檔案之間全域變數的使用
下一篇:如何遍歷目錄及其所有子目錄?
