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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top