2008-09-05 15 views
7

Auf Fedora Core 7 schreibe ich Code, der auf ARG_MAX basiert. Aber auch wenn ich #include <limits.h> bin, ist die Konstante noch nicht definiert. Meine Untersuchungen zeigen, dass es in <sys/linux/limits.h> vorhanden ist, aber das soll über Win32/Mac/Linux portierbar sein, so dass es direkt einschließlich es keine Option ist. Was ist denn hier los?Warum ist ARG_MAX nicht über limits.h definiert?

Antwort

8

Der Grund, warum es nicht in Grenzen ist. H ist, dass es keine Menge ist, die die Grenzen des Wertebereichs eines ganzzahligen Typs auf der Basis der Bitbreite der aktuellen Architektur angibt. Das ist die Rolle, die limits.h dem ISO-Standard zuweist.

Der Wert, an dem Sie interessiert sind, ist in der Praxis nicht hardwaregestützt und kann von Plattform zu Plattform und vielleicht von System zu Systemaufbau variieren.

Das richtige Verfahren ist es, sysconf anzurufen und nach "ARG_MAX" oder "_POSIX_ARG_MAX" zu fragen. I denke, das ist die POSIX-konforme Lösung sowieso.

Acc. In meiner Dokumentation enthalten Sie entweder unistd.h oder limits.h basierend auf den von Ihnen gewünschten Werten.

Ein weiterer Punkt: viele Implementierungen der exec-Familie von Funktionen geben E2BIG oder einen ähnlichen Wert zurück, wenn Sie versuchen, sie mit einer übergroßen Umgebung aufzurufen. Dies ist eine der definierten Bedingungen, unter denen exec tatsächlich zurückkehren kann.

-2

ARG_MAX ist in /usr/include/linux/limits.h definiert. Meine Linux Kernel Version ist 3.2.0-38.