2008-09-05 20 views
7

W Fedorze Core 7, piszę kod, który polega na ARG_MAX. Jednak nawet jeśli I #include <limits.h>, stała nadal nie jest zdefiniowana. Moje badania pokazują, że jest on obecny w <sys/linux/limits.h>, ale ma być przenośny w całej Win32/Mac/Linux, więc bezpośrednie włączenie go nie jest opcją. Co tu się dzieje?Dlaczego ARG_MAX nie jest zdefiniowany przez limits.h?

Odpowiedz

8

Powodem tego nie jest limit.h to, że nie jest to ilość podająca granice zakresu wartości typu całkowego w oparciu o szerokość bitową w aktualnej architekturze. To jest rola przypisana limit.h przez standard ISO.

Wartość, która cię interesuje, nie jest związana ze sprzętem w praktyce i może się różnić w zależności od platformy, a być może nawet kompilacji systemu do kompilacji systemu.

Prawidłowe jest wywołanie sysconf i pytanie "ARG_MAX" lub "_POSIX_ARG_MAX". I think to i tak zgodne z POSIX rozwiązanie.

Acc. do mojej dokumentacji dołączasz jeden lub oba z unistd.h lub limits.h na podstawie żądanych wartości.

Jeszcze jeden punkt: wiele implementacji rodziny funkcji exec zwraca E2BIG lub podobną wartość, jeśli próbujesz wywołać je w zbyt dużym środowisku. Jest to jeden ze zdefiniowanych warunków, w których exec może faktycznie powrócić.

-2

ARG_MAX jest zdefiniowane w /usr/include/linux/limits.h. Moja wersja jądra Linuksa to 3.2.0-38.

Powiązane problemy