Por que ARG_MAX não é definido por meio de limites.h?
Pergunta
No Fedora Core 7, estou escrevendo um código que depende de ARG_MAX
.No entanto, mesmo que eu #include <limits.h>
, a constante ainda não está definida.Minhas investigações mostram que está presente em <sys/linux/limits.h>
, mas isso deve ser portátil no Win32/Mac/Linux, portanto, incluí-lo diretamente não é uma opção.O que está acontecendo aqui?
Solução
A razão pela qual não está em limites.h é que não é uma quantidade que fornece os limites do intervalo de valores de um tipo integral com base na largura de bits da arquitetura atual.Essa é a função atribuída ao limit.h pelo padrão ISO.
O valor no qual você está interessado não está vinculado ao hardware na prática e pode variar de plataforma para plataforma e talvez de construção de sistema para construção de sistema.
O correto a fazer é ligar sysconf
e peça "ARG_MAX" ou "_POSIX_ARG_MAX".EU pensar de qualquer maneira, essa é a solução compatível com POSIX.
Ac.na minha documentação, você inclui um ou ambos unistd.h ou limites.h com base nos valores que você está solicitando.
Um outro ponto:muitas implementações da família de funções exec retornam E2BIG ou um valor semelhante se você tentar chamá-las em um ambiente superdimensionado.Esta é uma das condições definidas sob as quais exec pode realmente retornar.
Outras dicas
ARG_MAX é definido em /usr/include/linux/limits.h.Minha versão do kernel Linux é 3.2.0-38.