Максимальное количество семафоров в семафоре, заданное в C - PullRequest
0 голосов
/ 12 марта 2012

Как получить максимально возможное количество семафоров в семафоре, установленном в программе ac?Следующая программа получает набор из 10 семафоров, определенных идентификатором семафора semid

#include <sys/ipc.h>
#include <sys/sem.h>

key_t key;
int semid;

key = ftok("/home/somefile", 'E');
semid = semget(key, 10, 0666 | IPC_CREAT);

Но что если я хочу вызвать функцию semget, чтобы она всегда возвращала набор максимального числаСемафоры возможны в системе (SEMMSL, 250 в моем случае).Это не #define утверждение.Так есть ли способ получить его, кроме открытия файла /proc/sys/kernel/sem?

1 Ответ

2 голосов
/ 12 марта 2012

Похоже, у вас уже есть ответ - откройте / proc / sys / kernel / sem и вызовите atoi () для первого прочитанного вами числа. Иногда разбор файловой системы / proc является лучшим решением проблемы Linux.

Однако, я grep'd для 250 в / usr / include / linux. Похоже, что #define вы ищете жизни в /usr/include/linux/sem.h:

#define SEMMSL  250 

Итак, предполагая, что установлены заголовки Linux, вы должны иметь возможность #include linux / sem.h и получить доступ к этому определению SEMMSL.

Компромисс здесь в том, что использование #define жестко закодирует SEMMSL в ваш двоичный файл. Если вам случится перенести двоичный файл на другой компьютер с меньшим номером, я вижу, что это вызывает проблему. FWIW, я только что проверил на машинах x86_32, x86_64 и PowerPC Linux, на которых я работаю (все последние дистрибутивы Ubuntu), и все они сообщают о 250. Однако анализ файловой системы / proc дает вам текущий лимит для работающего ядра, который поражает я как лучшее решение.

...