Frage

Auf Fedora Core 7 schreibe ich Code, der darauf basiert ARG_MAX.Allerdings, auch wenn ich #include <limits.h>, die Konstante ist noch nicht definiert.Meine Untersuchungen zeigen, dass es in vorhanden ist <sys/linux/limits.h>, aber dies soll auf Win32/Mac/Linux portierbar sein, daher ist eine direkte Einbindung keine Option.Was ist denn hier los?

War es hilfreich?

Lösung

Der Grund dafür, dass es nicht in limits.h enthalten ist, liegt darin, dass es sich nicht um eine Größe handelt, die die Grenzen des Wertebereichs eines Integraltyps basierend auf der Bitbreite der aktuellen Architektur angibt.Das ist die Rolle, die limits.h vom ISO-Standard zugewiesen wird.

Der Wert, an dem Sie interessiert sind, ist in der Praxis nicht an die Hardware gebunden und kann von Plattform zu Plattform und möglicherweise von Systemaufbau zu Systemaufbau variieren.

Das Richtige ist, anzurufen sysconf und fragen Sie nach „ARG_MAX“ oder „_POSIX_ARG_MAX“.ICH denken Das ist sowieso die POSIX-kompatible Lösung.

Acc.Gemäß meiner Dokumentation fügen Sie je nach den von Ihnen angeforderten Werten unistd.h oder limits.h oder beide ein.

Noch ein Punkt:Viele Implementierungen der Exec-Funktionsfamilie geben E2BIG oder einen ähnlichen Wert zurück, wenn Sie versuchen, sie in einer übergroßen Umgebung aufzurufen.Dies ist eine der definierten Bedingungen, unter denen exec tatsächlich zurückkehren kann.

Andere Tipps

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top