Hayır, esas olarak, sistemlerin varsayılan olarak uygun olmasını gerektirmemesi veya yalnızca POSIX standardına uymasını gerektirmez (herhangi bir standardın hariç tutulmasına).
Örneğin, Solaris (sertifikalı uyumlu sistemi) kendi programları için geriye dönük uyumluluk seçti /bin
bu gizli yollarla davranırlar ve ayrı yerlerde (POSIX uyumlu yarar sağlamak açıklar neden /usr/xpg4/bin
, /usr/xpg6/bin
... XPG farklı sürümleri için (şimdi birleşti (POSIX) standardına göre, aslında Solaris'teki isteğe bağlı bileşenlerin bir parçası olanlar).
Hatta sh
içinde olması garanti edilmez /bin
. Solaris'te, /bin/sh
Solaris 10'a kadar Bourne kabuğu (yani POSIX uyumlu değil), Solaris 11'de ksh93 (eskiden POSIX uyumlu değil, pratikte daha fazlası /usr/xpg4/bin/sh
).
C'den, exec*p()
POSIX ortamında olduğunuzu (özellikle PATH
çevre değişkeniyle ilgili olarak ) kullanabilir ve varsayabilirsiniz .
Ayrıca PATH
ortam değişkenini de ayarlayabilirsiniz
#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"...);
Veya derleme zamanında çalıştırmak istediğiniz POSIX yardımcı programlarının yolunu belirleyebilir (GNU olanlar gibi bazı sistemlerde POSIXLY_CORRECT
uyumluluk için değişken ayarlamak gibi daha fazla adıma ihtiyacınız olduğunu göz önünde bulundurarak ).
Gibi şeyler de deneyebilirsiniz:
execlp("sh", "sh", "-c", "PATH=`getconf PATH`${PATH+:$PATH};export PATH;"
"unset IFS;shift \"$1\";"
"exec ${1+\"$@\"}", "2", "1", "ps", "-A"...);
Bir var umuduyla sh
içinde $PATH
o Bourne benzeri, ayrıca var ki bir olduğunu, getconf
ve POSIX Sen ilgilenen in sürümü için biri olduğunu.
/bin
, yani/bin/ed
kullanışlı olmalıdır ed kurulu ise. Şu an bulamıyorum, ancak LSB'nin buna bağlı olduğunu biliyorum ve bunu mantıksal olarak kullanarak hata raporlarını başarıyla savundum, bu yüzden en azından bir noktada doğru olması gerekirdi. (Ya da POSuX'ten başka bir şeydi ve ben haksızlık ediyorum, ama gerisi doğrudur.)