代码之家  ›  专栏  ›  技术社区  ›  Prof. Falken

如何在C中实现“ulimit-n 400”的等价性?

  •  3
  • Prof. Falken  · 技术社区  · 14 年前

    我必须运行命令“ulimit-n 400”来增加允许打开的文件数,然后才能启动用C编写的程序,但是有没有办法在C程序中执行相同的操作呢?

    也就是说,增加该进程允许打开的文件描述符的数量。(我对每个线程的限制不感兴趣。)

    是否需要设置ulimit,然后派生一个允许有更多打开文件的子文件?

    当然,我可以编写一个运行ulimit的shell包装器,然后启动我的C程序,但感觉不那么优雅。我也可以通过grep查看bash或sh的源代码,看看它是如何在那里完成的——如果我在这里没有得到答案,也许我会这样做。

    同样相关的,如果你想选择很多文件描述符, look here .

    2 回复  |  直到 7 年前
        1
  •  11
  •   D.Shawley    14 年前

    我想你在找 setrlimit(2) .

        2
  •  4
  •   Prof. Falken    14 年前
    #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 %llu\n", limit.rlim_cur);
      printf("The hard limit is %llu\n", limit.rlim_max);
    
      /* Also children will be affected: */
      system("bash -c 'ulimit -a'");
    
      return 0;
    }