2010-11-24 10 views
5

Je suis en train de compiler un programme C sous Ubuntu 10.04 pour 8.04. Il échoue parce que nous avons utilisé PATH_MAX et d'autres constantes qui devraient être définies dans limits.h. Selon diverses ressources, il devrait faire partie d'une bibliothèque C compatible POSIX.PATH_MAX non déclaré lors de la compilation sur Ubuntu 10.04

Est-ce un bug dans Ubuntu 10.04 ou existe-t-il un moyen de résoudre ce problème?

Répondre

7

POSIX définit plusieurs de ces limites comme facultatives. Si une limite FOO n'est pas définie dans limits.h, cela signifie que le système peut ne pas avoir une telle limite ou que la limite peut varier au moment de l'exécution ou en fonction du chemin auquel elle est appliquée. Dans ces cas, vous utilisez les pathconf, fpathconf ou sysconf fonctions et les _PC_* et _SC_* macros, comme dans:

path_max = pathconf("/", _PC_PATH_MAX); 

ou:

page_size = sysconf(_SC_PAGE_SIZE); 

Malheureusement GNU (la bibliothèque GNU C) définit beaucoup limites comme variable d'exécution quand ils sont réellement constants sur Linux, dans certains (à mon avis, très erroné) espérons qu'un jour les limites seront supprimées et les applications pourront immédiatement profiter de la suppression des limites. Cependant, pour la robustesse des applications et du noyau, il est préférable d'avoir des limites fixes tant qu'elles sont suffisamment grandes (comme le sont les limites de Linux).

+2

Il s'agit également, je le soupçonne, d'une tentative visant à encourager les applications à être portables sur des systèmes qui n'ont pas de limite définie par le système, comme GNU HURD. – caf

+0

@caf: Je pense que vous avez compris la raison exacte. –