Domanda

Sto cercando di compilare un programma C in Ubuntu 10.04 fatta per 8.04. E fallisce perché abbiamo PATH_MAX usati e altre costanti che dovrebbero essere definiti in limits.h. Secondo varie risorse, dovrebbe essere parte di una libreria C compatibile con POSIX.

Si tratta di un bug in Ubuntu 10.04 o c'è un modo corretto di risolvere questo?

È stato utile?

Soluzione

POSIX definisce molti di questi limiti ad essere facoltativo. Se un FOO limite non è definita in limits.h, significa che il sistema può avere tale limite o il limite può variare in fase di esecuzione o dipende dal percorso quale viene applicato. In questi casi, si utilizzano i pathconf, fpathconf, o funzioni sysconf e le macro _PC_* e _SC_*, come in:

path_max = pathconf("/", _PC_PATH_MAX);

o

page_size = sysconf(_SC_PAGE_SIZE);

Purtroppo GNU (la libreria C GNU) definisce molti limiti come runtime-variabile quando sono in realtà costante su Linux, in un certo (a mio parere, molto fuorviati) speranza che un giorno i limiti saranno rimossi e le applicazioni saranno immediatamente in grado di sfruttare la rimozione dei limiti. Tuttavia, per l'applicazione e la robustezza del kernel, in realtà è molto meglio avere limiti fissati, purché siano sufficientemente grande (come i limiti di Linux sono).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top