【发布时间】:2011-05-03 20:58:53
【问题描述】:
在我开始用 C 编写的程序之前,我必须运行命令“ulimit -n 400”来提高允许打开的文件数,但是有没有办法在 C 程序中做同样的事情?
也就是说,增加该进程允许打开的文件描述符的数量。 (我对每个线程的限制不感兴趣。)
是否会涉及设置 ulimits,然后派生一个允许打开更多文件的孩子?
当然,我可以编写一个运行 ulimit 的 shell 包装器,然后启动我的 C 程序,但感觉不太优雅。我还可以通过 bash 或 sh 的源代码 grep 看看它是如何在那里完成的 - 如果我在这里没有得到答案,也许我会这样做。
同样相关,如果你想在很多文件描述符上进行选择,look here。
【问题讨论】:
-
恐怕你可以降低限制,但不能从同一个过程中提高它。
-
@Pascal,我想可能是这样,但必须有办法抚养孩子,否则 ulimit 命令将不起作用。
-
你不能在 C 程序中调用 shell 吗?
-
@Raveline,不是真的。当您在 sh 或 bash 中运行“ulimit”时,它并没有真正运行新命令。它会更改允许其子级打开的文件数量。 (检查“which ulimit”,它不存在。)运行ulimit不会有任何改变,当被调用的shell退出C程序时,所有ulimit的变化都会立即消失。不,它必须是在第一个进程本身中完成的。
-
您可以将自己的限制从软限制提高到硬限制。