2013-04-07 57 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