No, no lo hace, principalmente por el hecho de que no requiere que los sistemas se ajusten de manera predeterminada o que cumplan solo con el estándar POSIX (con la exclusión de cualquier otro estándar).
Por ejemplo, Solaris (un sistema certificado compatible) eligió la compatibilidad con versiones anteriores para sus utilidades /bin
, lo que explica por qué se comportan de manera arcana y proporciona utilidades compatibles con POSIX en ubicaciones separadas ( /usr/xpg4/bin
, /usr/xpg6/bin
... para diferentes versiones de XPG (ahora fusionadas en POSIX), que en realidad son parte de componentes opcionales en Solaris).
Incluso sh
no se garantiza que esté en /bin
. En Solaris, /bin/sh
solía ser el shell Bourne (por lo que no es compatible con POSIX) hasta Solaris 10, mientras que ahora es ksh93 en Solaris 11 (todavía no es totalmente compatible con POSIX, pero en la práctica es más que eso /usr/xpg4/bin/sh
).
Desde C, puede usar exec*p()
y asumir que está en un entorno POSIX (en particular con respecto a la PATH
variable de entorno).
También puede establecer la PATH
variable de entorno
#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"...);
O puede determinar en el momento de la compilación la ruta de las utilidades POSIX que desea ejecutar (teniendo en cuenta que en algunos sistemas como los GNU, necesita más pasos, como establecer una POSIXLY_CORRECT
variable para garantizar el cumplimiento).
También puedes probar cosas como:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
Con la esperanza de que hay una sh
en $PATH
, que es similar a Bourne, que también hay una getconf
y que es el de la versión de POSIX Múdese interesados.
/bin
, es decir,/bin/ed
deben ser utilizables si ed está instalado No puedo encontrarlo en este momento, pero sé que LSB depende de ello, y he defendido con éxito los informes de errores utilizando eso como justificación, por lo que al menos debe haber sido cierto en algún momento. (O era algo más que POSuX y lo recuerdo mal, pero el resto es cierto.)