我想fork一個孩子和管道連接到標準輸入和孩子的標準輸出。然後運行exec ./xx。之後,我從父母給孩子送17,孩子打印它。迄今爲止都很好。但是當我向父母發送回覆時,它不起作用。 結果是:輸出什麼,看起來像等待一些輸入。 如果我刪除代碼「fscanf(b,」%d「,& x);」在父母,輸出是: 從C 0從p 17 我很困惑,爲什麼我得到奇怪的結果?謝謝Linux下C從孩子將數據發送到家長是好的,但不能從孩子將數據發送到父
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>
int main(int argc, char** argv) {
int fds[2], cp[2], x = 0;
pipe(fds);
pipe(cp);
int pid=fork();
// c
if (pid==0) {
close(fds[1]);
close(cp[0]);
dup2(fds[0],0);
dup2(cp[1], 1);
close(cp[1]);
close(fds[0]);
execlp("./xx", "xx", 0);
}
// p
if (pid) {
close(fds[0]);
close(cp[1]);
dup2(fds[1],1);
close(fds[1]);
FILE* a=fdopen(1, "w");
FILE* b=fdopen(cp[0], "r");
fprintf(a, "17");
fscanf(b, "%d", &x);
fprintf(stderr, "from C %d", x);
}
return 0;
}
XX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>
int main() {
int y = 0;
FILE* r=fdopen(STDIN_FILENO, "r");
fscanf(r, "%d", &y);
fprintf(stderr, "from p %d \n ", y);
FILE* w=fdopen(STDOUT_FILENO, "w");
fprintf(w, "17");
return 0;
}
你試圖用寫函數,而不是fprintf中? '寫(STDOUT_FILENO, 「17」,2)' – krystian71115
你爲什麼CP [1]'DUP2後'關'(CP [1],1)' – krystian71115
我的老師告訴我們一個管道只有寫,另一個入口爲了閱讀,我們必須關閉它。 –