2010-11-24 4 views
5

Ich versuche ein C-Programm in Ubuntu 10.04 für 8.04 zu kompilieren. Es schlägt fehl, weil wir PATH_MAX und andere Konstanten verwendet haben, die in limits.h definiert werden sollten. Gemäß verschiedenen Ressourcen sollte es Teil einer POSIX-kompatiblen C-Bibliothek sein.PATH_MAX beim Kompilieren unter Ubuntu 10.04 nicht deklariert

Ist das ein Fehler in Ubuntu 10.04 oder gibt es eine richtige Lösung?

Antwort

7

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).

+2

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

+0

@caf: Ich denke du hast den Grund genau herausgefunden. –