UNIX高級編程中,第三章習題中說道:
dup(fd,0);
dup(fd,1);
dup(fd,2);
if (fd >2)
close(fd);
為什麼當fd > 2時需要關閉?
我查找了答案,說是當fd為3時,有4個文件描述符指向同一文件表項,所以要關閉3,難道同一個文件表項的最大只支持3個文件描述符?
首先,上面應該是
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
這樣做的是重定向0、1、2(即標准輸入、輸出、出錯)到一個fd中。
明白了上面做的目的。那麼回頭再來看這個問題。
當fd>2時,我們只是希望重定向0、1、2到同一個fd中
而最後不希望一個多余的fd留在那裡占用著文件描述符。
所以要關閉掉。
最後,你的問題,同一個文件表項當然支持大於3個文件描述符了,
不然在dup2(fd, 2); 的時候就應該出出錯了。