2013-04-07 24 views
1

的代碼是這樣的:Linux開放源返回0

int fd = open(filename, O_RDONLY); 

「最大打開的文件」是1024的過程可以打開幾百個文件。 一開始,它的效果很好。一段時間後,打開返回0.我不知道爲什麼。幫幫我!!!感謝提前!

PS:這不是int fd = open(filename, O_RDONLY) == -1;

+0

如果試圖通過改變你的代碼限制的打開文件的數量,行爲變化?我的意思是,確保你在任何時候沒有超過1024個打開的文件。 – 2013-04-07 02:49:34

+1

但是,如果打開的文件太多,它應該返回-1,並將errno設置爲EMFILE。 – user2253605 2013-04-07 03:22:20

+1

是的,我的意思是別的..啊,這裏差不多早上6點..睡覺的時間:D看看這裏(並接受在這個問題的答案),這個問題是非常相似的:http://stackoverflow.com/ question/2135159/socket-returns-0-c-client-server-app – 2013-04-07 03:38:32

回答

4

open返回0,它告訴你,如果你想用你剛剛打開的文件,你應該使用FD 0。

您是否收到關閉標準輸入?

+0

0表示stdin,但它應該返回一個大於3的數字?不是嗎? – user2253605 2013-04-07 03:19:42

+1

@ user2253605:它會返回它分配的任何fd。如果你關閉了stdin,0是完全公平的遊戲。 – tmyklebu 2013-04-07 03:53:49

0

管理員可以改變的ulimit的一些參數 管理員可以設置「的ulimit -n 2000」和每個進程打開的文件數可以是2000

+0

如果打開的文件太多,它應該返回-1,並將errno設置爲EMFILE。但是它返回0.爲什麼? – user2253605 2013-04-07 03:23:25