Nein, dies ist nicht der Fall, hauptsächlich aus dem Grund, dass für Systeme keine Standardkonformität oder nur die Einhaltung des POSIX-Standards (unter Ausschluss eines anderen Standards) erforderlich ist .
Zum Beispiel Solaris (ein zertifiziertes konformes System) wählte die Abwärtskompatibilität für sein Dienstprogramme /bin, was erklärt , warum diejenigen , verhalten sie in obskuren Wegen und POSIX-konformen Dienstprogramme in getrennten Standorten bieten ( /usr/xpg4/bin, /usr/xpg6/bin... für verschiedene Versionen der XPG (jetzt verschmolzen im POSIX) -Standard, wobei diese Komponenten tatsächlich Teil optionaler Komponenten in Solaris sind.
Auch shist nicht garantiert, in zu sein /bin. Unter Solaris /bin/shfrüher das Bourne - Shell (also nicht POSIX - konform) bis Solaris 10, während es jetzt ksh93 in Solaris 11 (noch nicht vollständig POSIX - konform, aber in der Praxis mehr als /usr/xpg4/bin/sh).
Ab C können Sie verwenden exec*p()und davon ausgehen, dass Sie sich in einer POSIX-Umgebung befinden (insbesondere in Bezug auf die PATHUmgebungsvariable).
Sie können auch die PATHUmgebungsvariable festlegen
#define _POSIX_C_SOURCE=200809L /* before any #include */
...
confstr(_CS_PATH, buf, sizeof(buf)); /* maybe append the original
* PATH if need be */
setenv("PATH", buf, 1);
exec*p("ps"...);
Oder Sie können zum Zeitpunkt der Erstellung den Pfad der POSIX-Dienstprogramme bestimmen, die Sie ausführen möchten (unter Berücksichtigung der Tatsache, dass auf einigen Systemen wie GNU weitere Schritte erforderlich sind, z. B. das Festlegen einer POSIXLY_CORRECTVariablen, um die Konformität sicherzustellen).
Sie können auch Folgendes ausprobieren:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
In der Hoffnung, dass es ein shIn gibt $PATH, dass es Bourne-artig ist, dass es auch ein gibt getconfund dass es dasjenige für die Version von POSIX ist, an der Sie interessiert sind.
/bin/bin/ed