POSIX definiert viele solcher Grenzwerte als optional. Wenn ein Grenzwert FOO nicht in limits.h
definiert ist, bedeutet dies, dass das System möglicherweise keine solche Begrenzung hat oder das Limit zur Laufzeit oder abhängig vom Pfadnamen, auf den es angewendet wird, variieren kann. In diesen Fällen verwenden Sie die pathconf
, fpathconf
oder sysconf
Funktionen und die _PC_*
und _SC_*
Makros, wie in:
path_max = pathconf("/", _PC_PATH_MAX);
oder:
page_size = sysconf(_SC_PAGE_SIZE);
Leider GNU (die GNU-C-Bibliothek) definiert viele Limits als Runtime-Variable, wenn sie eigentlich unter Linux konstant sind, in manchen (meiner Meinung nach sehr fehlgeleitet) hoffen, dass eines Tages die Limits entfernt werden und Anwendungen sofort von der Aufhebung der Limits profitieren können. Für die Anwendungs- und Kernel-Robustheit ist es jedoch viel besser, feste Limits zu haben, solange sie ausreichend groß sind (wie die Linux-Limits).
Es ist auch, so vermute ich, ein Versuch, Anwendungen dazu zu ermutigen, auf Systeme portierbar zu sein, die kein systemdefiniertes Limit haben, wie GNU HURD. – caf
@caf: Ich denke du hast den Grund genau herausgefunden. –