Não, principalmente porque não exige que os sistemas estejam em conformidade por padrão ou em conformidade com apenas com o padrão POSIX (com exclusão de qualquer outro padrão).
Por exemplo, o Solaris (um sistema compatível certificado) escolheu a compatibilidade com versões anteriores de seus utilitários /bin
, o que explica por que eles se comportam de maneiras misteriosas e fornece utilitários compatíveis com POSIX em locais separados (/usr/xpg4/bin
, /usr/xpg6/bin
... para diferentes versões do XPG (agora mescladas) no padrão POSIX), sendo parte dos componentes opcionais do Solaris).
sh
Não é garantido que Even esteja presente /bin
. No Solaris,/bin/sh
costumava ser o shell Bourne (não compatível com POSIX) até o Solaris 10, enquanto agora é ksh93 no Solaris 11 (ainda não totalmente compatível com POSIX, mas na prática é mais do que isso /usr/xpg4/bin/sh
).
Em C, você pode usar exec*p()
e assumir que está em um ambiente POSIX (em particular no que diz respeito àPATH
variável de ambiente).
Você também pode definir a PATH
variável de ambiente
#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"...);
Ou você pode determinar em tempo de construção o caminho dos utilitários POSIX que deseja executar (tendo em mente que em alguns sistemas como o GNU, você precisa de mais etapas, como definir uma POSIXLY_CORRECT
variável para garantir a conformidade).
Você também pode tentar coisas como:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
Na esperança de que há um sh
em $PATH
, que é Bourne-like, que há também um getconf
e que é a pessoa certa para a versão do POSIX você está em interessado.
/bin
, ou seja,/bin/ed
devem ser utilizáveis se ed estiver instalado. Não consigo encontrá-lo agora, mas sei que o LSB depende disso e defendi com êxito os relatórios de erros usando isso como justificativa, portanto, pelo menos, deve ter sido verdade em algum momento. (Ou era algo diferente de POSuX e eu lembro errado, mas o resto é verdade.)