2014-10-06 36 views
0

我在下面有一段代碼。我想看看fd1和fd0的值是多少,在我創建的所有進程中,它們最終都是3和4?爲什麼是這樣。c管道爲什麼是fd [0]和fd [1] 3和4

if (pipe(fd) < 0) 
     printf("Pipe Error"); 
     if ((pid = fork()) < 0) 
     { 
     printf("Fork Error"); 
     } 
     else if (pid > 0) //daddy 
     { 
     close (fd[0]); 
     write(fd[1],"Hi, Im Parent \n", 15); 
     printf("Value of fd1 is %d and fd0 is %d in parent. \n", fd[1], fd[0]); 
     printf("Parent Process is %d \n", pid); 
     printf("My true id is: %d and my parent id is %d \n", getpid(), getppid()); 
     wait(); 
     } 
+6

0,1,2已經在使用(stdin,stdout,stderr) – 2014-10-06 22:49:32

+0

您不包含'fd *'的定義,但顯然它們是文件描述符。文件描述符是一個小整數,用於標識隱藏在內核中的資源(打開文件) - 不是指針或緩衝區。 – alexis 2014-10-06 22:55:43

+0

你期望什麼值? – 2014-10-06 22:58:08

回答

1

文件描述(從功能,如openpipe回來,雖然以不同的方式)是代表一個打開的文件小整數。

他們是從文件的概念處理這是一個指向標準C(一FILE型我使用術語「把手」不同,雖然標準本身只是指出一個指針與流和回報聯繫起來那個指針)。

因此,你會預計行爲就像你看到的,pipe()抓住當前未使用的前兩個描述符。

文件描述符012,參考標準輸入,標準輸出和標準誤差分別類似於FILE *stdinstdoutstderr