Widzę często wymieniane POSIX i wszędzie, i założyłem, że jest to podstawowy standard UNIX .. dopóki nie zauważyłem następującego fragmentu na stronie Wikipedii: The Open Group
Grupa Open jest najbardziej znana jako jednostka certyfikująca znak towarowy UNIX, a publikacja standardu technicznego Single UNIX Specification , który rozszerza standardy POSIX i jest oficjalną definicją systemu UNIX .
Jeśli oficjalna definicja systemu UNIX jest rozszerzeniem POSIX, to czym dokładnie jest POSIX? ,,, Z pewnością wydaje się to kamieniem węgielnym świata UNIX, ale nie wiem, jak to pasuje do ogólnego obrazu.
Odpowiedzi:
POSIX po raz pierwszy był standardem w 1988 r. Na długo przed specyfikacją Single UNIX. Była to jedna z prób ujednolicenia wszystkich różnych wideł i systemów uniksopodobnych. POSIX jest standardem IEEE, ale ponieważ IEEE nie jest właścicielem znaku towarowego UNIX®, standard ten nie jest UNIX®, chociaż opiera się na istniejącym wówczas interfejsie API UNIX®. Pierwszy standard POSIX.1 jest formalnie znany jako IEEE std 1003.1-1988. [ 1 ] IEEE naliczyła znaczną opłatę za uzyskanie kopii standardu.
Grupa Open wydała specyfikację Single UNIX (SUSv2) w 1997 r. W oparciu o pracę IEEE dotyczącą standardu POSIX. SUSv3 został wydany w 2001 roku ze wspólnej grupy roboczej IEEE i The Open Group znanej jako Austin Group. SUSv3 jest również znany jako POSIX: 2001 [ 2 ]. Istnieje również POSIX: 2004 i POSIX: 2008, który jest rdzeniem SUSv4. Jeśli chodzi o to, czym jest UNIX®, UNIX® jest tym, co twierdzi obecny zarejestrowany właściciel znaku towarowego. Od 1994 roku jest to The Open Group.
Firma Novell przejęła działalność w zakresie systemów UNIX® od AT & T / USL, w której narodził się UNIX®. W 1994 roku sprzedali prawo do znaku towarowego UNIX® firmie X / Open [ 3 ], znanej obecnie jako The Open Group. Następnie sprzedali SCO kod źródłowy UNIX jako UNIXWARE®. [ 3 ] Sam UNIX® rozwidlił się wiele razy [ 4 ] [ 5 ] częściowo z powodu modelu licencyjnego AT&T. Zakup UNIX® zapewnił pełne źródło systemu operacyjnego i pełny łańcuch narzędzi do jego zbudowania. Modyfikacje źródła mogą być rozpowszechniane i wykorzystywane przez każdego, kto posiadał licencję na system UNIX® od AT&T. Opłata licencyjna była w tysiącach.
BSD był projektem w Berkeley, który dodał szereg ulepszeń do systemu operacyjnego UNIX®. Kod BSD został wydany na podstawie znacznie bardziej liberalnej licencji niż źródło AT&T i nie wymagał opłaty licencyjnej ani nawet wymogu dystrybucji ze źródłem, w przeciwieństwie do GPL, której używają Projekt GNU i Linux. Spowodowało to włączenie znacznej części kodu BSD do różnych komercyjnych rozwidleń UNIX. Około 4,3BSD prawie zastąpili jakąkolwiek potrzebę oryginalnego kodu źródłowego AT&T UNIX®. FreeBSD / NetBSD / OpenBSD to wszystkie widelce 4.3BSD, które są kompletnym systemem operacyjnym i nie mają oryginalnego kodu źródłowego AT&T. Nie mają też prawa do znaku towarowego UNIX®, ale znaczna część ich kodu jest używana przez komercyjne systemy operacyjne UNIX.
Linux został opracowany w 1991 roku, ale został opracowany od zera w przeciwieństwie do BSD i wykorzystuje istniejący Projekt GNU, który jest czystą implementacją dużej części przestrzeni użytkownika UNIX. Implementuje wiele POSIX dla kompatybilności i ma konstrukcję podobną do UNIX, ale nie ma ścisłego połączenia z AT&T lub UNIX®, które mają BSD.
źródło
Najważniejsze rzeczy, które definiuje POSIX 7
C API
Znacznie rozszerza ANSI C o takie rzeczy jak:
mkdir
,dirname
,symlink
,readlink
,link
(hardlinki),poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, semaphorssem_*
, wspólna pamięć (shm_*
)kill
, parametrów harmonogramu (nice
,sched_*
)sleep
,mkfifo
,setpgid()
socket()
mmap
,mlock
,mprotect
,madvise
,brk()
reg*
)Te interfejsy API określają również podstawowe koncepcje systemu, od których są zależne, np.
fork
Wymagają koncepcji procesu.Wiele wywołania systemowe Linux istnieć w celu realizacji określonej funkcji POSIX API C i uczynić Linux zgodny np
sys_write
,sys_read
... Wiele z tych syscalli również specyficzne dla Linuksa rozszerzeń jednak.Główna implementacja pulpitu Linux: glibc, który w wielu przypadkach zapewnia płytkie opakowanie dla wywołań systemowych.
Narzędzia CLI
Np:
cd
,ls
,echo
, ...Wiele narzędzi to bezpośrednie interfejsy powłoki dla odpowiedniej funkcji API C, np
mkdir
.Główne Linux realizacja pulpit: GNU Coreutils dla małych, oddzielnych Projekt GNU dla tych dużych:
sed
,grep
,awk
, ... Niektóre narzędzia CLI są realizowane przez Bash jako wbudowanych wtyczek .Język powłoki
Na przykład,
a=b; echo "$a"
Główne implementacje pulpitu Linux: GNU Bash .
Zmienne środowiska
Np .:
HOME
,PATH
.PATH
semantyka wyszukiwania jest określona , w tym sposóbPATH
, w jaki ukośniki uniemożliwiają wyszukiwanie .Status wyjścia z programu
ANSI C mówi
0
lubEXIT_SUCCESS
dla sukcesu,EXIT_FAILURE
dla niepowodzenia i pozostawia zdefiniowaną resztę implementacji.POSIX dodaje:
126
: znaleziono polecenie, ale nie można go wykonać.127
: nie znaleziono polecenia.> 128
: zakończone sygnałem.Ale wydaje się, że POSIX nie określa
128 + SIGNAL_ID
reguły używanej przez Bash: Domyślny kod wyjścia po zakończeniu procesu?Wyrażenie regularne
Istnieją dwa typy: BRE (podstawowy) i ERE (rozszerzony). Podstawowy jest przestarzały i jest przechowywany tylko po to, by nie łamać interfejsów API.
Są one implementowane przez funkcje C API i używane w narzędziach CLI, np.
grep
Domyślnie akceptują BRE, a ERE z-E
.Na przykład:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Ważna implementacja Linuksa: glibc implementuje funkcje w regex.h, których programy
grep
mogą używać jako backend.Struktura katalogu
Np
/dev/null
,/tmp
Linux FHS znacznie rozszerza POSIX.
Nazwy plików
/
jest separatorem ścieżkiNUL
nie może być użyty.
jestcwd
,..
rodzica-zA-Z0-9._-
Zobacz także: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Konwencje API narzędzi wiersza poleceń
Nieobowiązkowe, używane przez POSIX, ale prawie nigdzie indziej, zwłaszcza nie w GNU. Ale to prawda, jest zbyt restrykcyjne, np. Tylko flagi z jedną literą (np.
-a
), Brak podwójnych długich łączników (np--all
.).Kilka powszechnie stosowanych konwencji:
-
oznacza standardowe wejście, w którym oczekiwany jest plik--
kończy flagi, np.ls -- -l
aby wyświetlić katalog o nazwie-l
Zobacz także: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
„POSIX ACL” (listy kontroli dostępu), np. Używane jako backend dla
setfacl
.Zostało to wycofane, ale zostało zaimplementowane w kilku systemach operacyjnych, w tym w systemie Linux z
setxattr
.Kto jest zgodny z POSIX?
Wiele systemów ściśle przestrzega POSIX, ale niewiele z nich jest certyfikowanych przez Open Group, która utrzymuje ten standard. Godne uwagi certyfikowane obejmują:
Większość dystrybucji Linuksa jest bardzo zgodna, ale nie ma certyfikatu, ponieważ nie chcą płacić za sprawdzenie zgodności. Inspur K-UX i Huawei EulerOS to dwa certyfikowane przykłady.
Oficjalna lista certyfikowanych systemów znajduje się na stronie : https://www.opengroup.org/openbrand/register/, a także na stronie wiki .
Windows
System Windows wdrożył POSIX w niektórych swoich profesjonalnych dystrybucjach.
Ponieważ była to funkcja opcjonalna, programiści nie mogli na niej polegać w większości aplikacji dla użytkowników końcowych.
Wsparcie zostało wycofane w Windows 8:
W 2016 r. Ogłoszono nowy oficjalny interfejs API podobny do systemu Linux o nazwie „Windows Subsystem for Linux”. Obejmuje wywołania systemowe Linux, uruchamianie ELF, części
/proc
systemu plików, Bash, GCC, (TODO prawdopodobnie glibc?)apt-get
I więcej: https://channel9.msdn.com/Events/Build/2016/P488, więc uważam, że to pozwoli Windowsowi uruchomić wiele, jeśli nie wszystkie, POSIX. Jednak koncentruje się na programistach / wdrożeniach zamiast na użytkownikach końcowych. W szczególności nie było planów zezwolenia na dostęp do GUI systemu Windows.Przegląd historyczny oficjalnej zgodności Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin jest znanym projektem firmy GPL, który „zapewnia znaczną funkcjonalność interfejsu API POSIX” dla systemu Windows, ale wymaga „przebudowania aplikacji ze źródła, jeśli chcesz, aby działała w systemie Windows”. MSYS2 to pokrewny projekt, który wydaje się dodawać więcej funkcji na Cygwin.
Android
Android ma własną bibliotekę C (Bionic), która nie w pełni obsługuje POSIX od Androida O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Poziom bonusowy
Linux Standard Base rozszerza POSIX.
Użyj indeksów innych niż ramki, są one znacznie bardziej czytelne i możliwe do przeszukiwania: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Pobierz pełną wersję zip stron HTML do grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939
źródło
POSIX jest standardem przenośnego systemu operacyjnego. Opisuje niektóre narzędzia, interfejsy API i usługi, które zgodny system operacyjny musi zapewnić oprogramowaniu (na przykład gniazda, operacje we / wy plików i wątki), a także konwencje, w jaki sposób należy je wywoływać z programu.
Chodzi o to, że program napisany dla jednego systemu operacyjnego zgodnego z POSIX byłby łatwiejszy do przeniesienia do innego systemu zgodnego z POSIX niż między systemami niezgodnymi z POSIX. Dlatego znacznie łatwiej jest przenieść aplikację z, powiedzmy, FreeBSD na Linuksa, niż przenieść ją z FreeBSD na Windows (chociaż Windows rzekomo obsługuje podzbiór POSIX).
źródło
POSIX jest podzbiorem UNIX, który ma na celu objęcie różnych środowisk uniksowych dla innych systemów operacyjnych; pierwotnie obejmowało środowiska takie jak Eunice dla VMS, osobowość POSIX systemu Windows NT oraz domenę / system operacyjny Apollo. Można go traktować jako standardowy interfejs API do przenoszenia dla podzbioru usług systemu operacyjnego, których zachowanie jest wspólne dla systemów Unix i innych niż Unix. Więcej informacji można znaleźć na stronie http://standards.ieee.org/develop/wg/POSIX.html .
źródło