Файловые дескрипторы Unix max

Недавно я написал программу для определения максимального количества файловых дескрипторов, открытых для каждого процесса.

Это было по существу

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 для всей системы, а не для каждого процесса?


person CyberShot    schedule 25.04.2012    source источник
comment
Что заставило вас поверить, что этот метод будет работать, чтобы смотреть на что-либо за пределами ограничения для каждого процесса?   -  person geekosaur    schedule 25.04.2012
comment
Вам нужно будет создать несколько процессов, которые будут работать одновременно.   -  person wallyk    schedule 25.04.2012
comment
Это только позволяет вам найти максимальное количество. процессов на процесс для пользователя, запустившего этот код. Использование этой техники для увеличения общесистемного ограничения может нанести ущерб — вы предотвратите открытие файлов законными процессами во время работы этой штуки. Не. Используйте любой инструмент для конкретной ОС, чтобы выяснить это.   -  person Mat    schedule 25.04.2012
comment
На самом деле я запускаю этот код на Minix, поэтому он не должен быть слишком вредным. Я не знаю, как изменить мою программу для поиска общесистемного ограничения? Что это хотя бы значит?   -  person CyberShot    schedule 25.04.2012
comment
почему бы не использовать только getrlimit()?   -  person Zaffy    schedule 10.06.2012


Ответы (1)


У меня есть несколько идей для решения этой проблемы:

1 — умножьте максимальное количество процессов, разрешенных в MINIX, на максимальное количество FD на процесс.

  • Меня беспокоит только то, что существует какой-то жесткий предел, который находится ниже или выше количества процессов * FD на процесс.

2 - Создайте программу, которая запускает указанную выше программу несколько раз.

  • Stipulation is that you have to somehow return count to the original program and sum it
    • Also, I have no idea how to call other processes from within a program and retrieve a return value from it.
    • Кроме того, как вы можете запускать все процессы одновременно? и как узнать МАКСИМАЛЬНОЕ количество процессов и как узнать, когда остановить запущенные процессы?

P.S. Ты должно быть в моем классе ecs150 не так ли?

person kabirpong    schedule 26.04.2012