【问题标题】:Unix max file descriptorsUnix 最大文件描述符
【发布时间】:2012-04-25 05:22:54
【问题描述】:

我最近编写了一个程序来计算每个进程打开的文件描述符的最大数量。

本质上是

int fd = creat("somefile.dat");
int count = 1;

while(1)
{

 int s = dup(fd);

  if (s == -1)
    break;

  count++;
}

printf("Max fd: %d", s);

现在我将如何应用这个相同的程序,但要找到系统范围而不是每个进程的最大 fd 数量?

【问题讨论】:

  • 什么会让您相信这种技术可以用于查看超出每个进程限制的任何内容?
  • 您必须创建多个同时运行的进程。
  • 那只允许你找到最大编号。 运行该代码的用户的每个进程的进程数。使用该技术来推动系统范围的限制可能会造成破坏 - 您将阻止合法进程在“事物”运行时打开文件。不。使用任何特定于操作系统的工具来找出它。
  • 我实际上是在 Minix 上运行这段代码,所以它应该不会太有害。我不知道如何更改我的程序以寻找系统范围的限制?这甚至意味着什么?
  • 为什么不只使用 getrlimit() ?

标签: c system-calls file-descriptor


【解决方案1】:

我有多种解决方案的想法:

1 - 将 MINIX 中允许的最大进程数乘以每个进程的最大 FD

  • 我唯一担心的是,有某种硬上限低于或高于进程数 * 每个进程的 FD 数

2 - 创建一个多次运行上述程序的程序

  • 规定您必须以某种方式将计数返回到原始程序并求和
    • 另外,我不知道如何从程序中调用其他进程并从中检索返回值。
    • 此外,如何同时运行所有进程?以及您如何知道 MAX # 个进程,以及您如何知道何时停止运行进程?

附:你一定是我的ecs150班的吧?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多