Odpowiedź Steven jest dobrym podejściem.
Ale jeśli naprawdę chcesz, aby określić maksymalną wartość pid_t
bez polegania na zachowanie niezdefiniowane, myślę, że najlepiej jest:
#include <sys/types.h>
#include <limits.h>
#include <stdlib.h>
static inline pid_t get_max_pid_t()
{
if (sizeof(pid_t) == sizeof(short)) return SHRT_MAX;
if (sizeof(pid_t) == sizeof(int)) return INT_MAX;
if (sizeof(pid_t) == sizeof(long)) return LONG_MAX;
#if defined(LLONG_MAX) // C99
if (sizeof(pid_t) == sizeof(long long)) return LLONG_MAX;
#endif
abort();
}
POSIX gwarantuje, że pid_t
jest podpisana integralną typu. Kod ten zakłada, że rozmiar podpisanego typu integralnego jednoznacznie określa ten typ.Myślę, że to doskonałe założenie, ale nie jestem pewien, czy standard to gwarantuje.
Każdy przyzwoity kompilator będzie wbudowywał i stale propagował to wszystko w nieistnienie, więc wydajność nie jest problemem.
(Na marginesie: W C++ byłoby piszesz std::numeric_limits<pid_t>::max()
i być z nim zrobić.)
nie jest 'sizeof' wystarczające do celu? (Nie jestem pewien, dlaczego potrzebujesz tego, ale czy chcesz opracować?) – Mat
'/ proc/sys/kernel/pid_max' definiuje maksymalny pid, który możesz edytować. –
@KingsIndian, dzięki. Mam na myśli maksymalny typ, a nie maksymalną wartość systemu w praktyce. – pilcrow