Perché ARG_MAX non è definito tramite bounds.h?
Domanda
Su Fedora Core 7, sto scrivendo del codice che si basa su ARG_MAX
.Tuttavia, anche se io #include <limits.h>
, la costante non è ancora definita.Le mie indagini mostrano che è presente in <sys/linux/limits.h>
, ma dovrebbe essere portabile su Win32/Mac/Linux, quindi includerlo direttamente non è un'opzione.Cosa sta succedendo qui?
Soluzione
Il motivo per cui non è in bounds.h è che non è una quantità che fornisce i limiti dell'intervallo di valori di tipo integrale basato sulla larghezza di bit nell'architettura corrente.Questo è il ruolo assegnato a bounds.h dallo standard ISO.
Il valore a cui sei interessato non è in pratica legato all'hardware e può variare da piattaforma a piattaforma e forse da build di sistema a build di sistema.
La cosa giusta da fare è chiamare sysconf
e chiedi "ARG_MAX" o "_POSIX_ARG_MAX".IO pensare questa è comunque la soluzione conforme a POSIX.
acc.alla mia documentazione, includi uno o entrambi unistd.h o limit.h in base ai valori che stai richiedendo.
Un altro punto:molte implementazioni della famiglia di funzioni exec restituiscono E2BIG o un valore simile se provi a chiamarle con un ambiente sovradimensionato.Questa è una delle condizioni definite in base alle quali exec può effettivamente restituire.
Altri suggerimenti
ARG_MAX è definito in /usr/include/linux/limits.h.La mia versione del kernel Linux è 3.2.0-38.