質問
一般的な OS では、標準の C ディスク IO を使用して一度にいくつのファイルを開くことができますか?
それを示す定数を読み取ろうとしましたが、Windows XP 32 ビットでは、それはわずか 20 かそこらでした。30 を超えても問題なく動作するようですが、広範囲にはテストしていません。
最大で一度に約 400 個のファイルを開く必要があるため、最新の OS がそれをサポートしていれば素晴らしいことになります。XP をサポートする必要はありませんが、Linux、Win7、および最新バージョンの Windows サーバーをサポートする必要があります。
別の方法は、独自のミニ ファイル システムを作成することですが、できれば避けたいと考えています。
解決
Linuxでは、これは、利用可能なファイルディスクリプタの量に依存しています。
使用可能なFDのシェルあたりの数を表示/設定するulimit -n
を使用することができます。
これらの命令がチェック(または変更する方法にを参照してください。 )利用可能な総FDの値:LinuxでS
このIBMサポート記事には示唆そのWindows上の数は512で、レジストリで変更することができます(記事の指示通り)
<ストライキ>
int型にも制限上限の大きさ - open()
はint
としてFDを返すように。
ストライク>(INT_MAXがたくさんあるように無関係な)
他のヒント
プロセスははgetrlimitシステム・コールを使用して制限を照会することができます。
#include<sys/resource.h>
struct rlimit rlim;
getrlimit(RLIMIT_NOFILE, &rlim);
printf("Max number of open files: %d\n", rlim.rlim_cur-1);
参考までに、root として、最初に 'nofile' 項目を変更する必要があります。 /etc/security/limits.conf 。例えば:
* hard nofile 10240
* soft nofile 10240
(limits.conf の変更は通常、ユーザーがログインしたときに有効になります)
その後、ユーザーは ulimit -n bashコマンド。Fedora 11 で最大 10,240 個のファイルを使用してこれをテストしました。
ulimit -n <max_number_of_files>
最後に、これはすべて、次の式で与えられるカーネル制限によって制限されます。(これに値をエコーしてさらに高くすることもできると思います...ご自身の責任で)
cat /proc/sys/fs/file-max
また、を参照してください。 http://www.karakas-online.de/forum/viewtopic.php?t=9834