簡體   English   中英

這個C程序如何工作?

[英]How does this C program work?

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] ==>中,然后創建了一個新進程

  • 如果s = 0 ==>程序輸入10個整數==>如果整數是奇數==>,它將啟動子函數。它將sizex(int)所指向的緩沖區中的&x字節寫入與打開的文件關聯的文件中描述符fd [1] ==>它將fd [1]指示的文件描述符釋放

  • 如果s!= 0 ==>如果&v = 0 ==>,它將啟動父函數,並顯示&v的值。

但是我仍然不確定該程序如何工作,請隨時進行更正或提供更多詳細信息。 感謝您的幫助!

你近了

您對子進程如何工作的描述是正確的。

父進程從管道讀取每個數字。 它不是在測試z是否為0,而是在測試read是否返回0,這在達到EOF(即孩子已關閉管道)時會執行。 而且它不顯示的值&z ,它加起來的所有值z ,當它到達終點顯示總。

在編寫時,該代碼有點奇怪,因為讀取和寫入功能的第二個和第三個參數看起來是向后的。 “從sizeof(int)所指向的緩沖區寫入&y字節”很奇怪,因為sizeof()都不是緩沖區。

如果交換這兩個,則子進程將從控制台讀取整數,並將奇數寫入到返回父級的管道中,后者將讀取它們,求和並在EOF上打印總和。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM