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?

È stato utile?

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.

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