void child(int *fd) {
int j , x;
for(j = 0; j < 10; j ++) {
scanf ("%d", &x);
if(x % 2 != 0)
write(fd[1], sizeof(int), &x);
}
close (fd[1]);
}
void parent(int *fd) {
int v, r = 0;
while(read(fd[0], sizeof(int), &v) != 0)
r = r + v;
printf("%d\n", r);
}
int main(void) {
int s, fd[2];
pipe(fd);
s = fork();
if(s == 0)
child(fd);
else parent(fd);
}
我想的是,上述程序創建管道fd和放置兩個文件描述符,每一個入參數FD [0]和FD [1] ==>然後,它創建一個新進程這個C程序是如何工作的?
如果s = 0 ==>程序輸入10個整數==>如果整數是奇數==>它會啓動子函數==>它將sizeof(int)指向的緩衝區寫入& x字節到與打開文件描述符,fd [1] ==>它釋放由fd [1]指示的文件描述符
它啓動父函數如果s!= 0 ==>如果& V = 0 ==>它顯示& v的值。
但我還是不知道如何計劃的運作方式,請隨時糾正或給予更多細節。感謝您的幫助!
請注意,您應該檢查* scanf *的返回值。現在,如果它讀取非數字,它將返回0,並保留* y *不變(因此可能在此代碼中未初始化),並將非數字保留爲未讀(所以它將保持返回0而不讀取任何內容)。 – hyde
你不能刪除那樣的內容。人們已經回答了。摧毀你的問題使他們的答案無效。如果你不想在線,你不應該問這個問題。通過在這裏發佈,你已經永久地將內容授權給網站。請保留原地。 – Stijn
@ user3305709如果您希望看到此內容被刪除的原因很充分,請使用「其他」選項標記主持人注意力。然後清楚地解釋爲什麼這需要被刪除。雖然也許你只需要解除關聯。如果因爲這種情況而被暫停,那麼像這樣刪除它最終只會傷害你。 – Bart