4

C で記述されたプログラムを開始する前に、「ulimit -n 400」コマンドを実行して、許可されているオープン ファイルの数を増やす必要がありますが、C プログラム内から同等のことを行う方法はありますか?

つまり、そのプロセスで許可されるオープン ファイル記述子の数を増やします。(スレッドごとの制限には興味がありません。)

ulimits を設定してから、より多くのファイルを開くことができる子をフォークする必要がありますか?

もちろん、ulimit を実行するシェル ラッパーを作成してから C プログラムを起動することもできますが、洗練されていないように感じます。また、bash または sh のソース コードを grep して、そこでどのように処理されているかを確認することもできます。

関連して、多数のファイル記述子を選択する場合は、こちらを参照してください

4

2 に答える 2

11

を探していると思いますsetrlimit(2)

于 2010-11-02T10:47:16.343 に答える
8
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main (int argc, char *argv[])
{
  struct rlimit limit;
  
  limit.rlim_cur = 65535;
  limit.rlim_max = 65535;
  if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
    printf("setrlimit() failed with errno=%d\n", errno);
    return 1;
  }

  /* Get max number of files. */
  if (getrlimit(RLIMIT_NOFILE, &limit) != 0) {
    printf("getrlimit() failed with errno=%d\n", errno);
    return 1;
  }

  printf("The soft limit is %lu\n", limit.rlim_cur);
  printf("The hard limit is %lu\n", limit.rlim_max);

  /* Also children will be affected: */
  system("bash -c 'ulimit -a'");

  return 0;
}
于 2010-11-02T11:01:14.393 に答える