Najważniejsze rzeczy, które definiuje POSIX 7
C API
Znacznie rozszerza ANSI C o takie rzeczy jak:
- więcej operacji na plikach:
mkdir
, dirname
, symlink
, readlink
, link
(hardlinki), poll()
, stat
, sync
,nftw()
- Sposób i nici:
fork
, execl
, wait
, pipe
, semaphors sem_*
, wspólna pamięć ( shm_*
) kill
, parametrów harmonogramu ( nice
, sched_*
) sleep
, mkfifo
,setpgid()
- sieć:
socket()
- Zarządzanie pamięcią:
mmap
, mlock
, mprotect
, madvise
,brk()
- narzędzia: wyrażenia regularne (
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
lub EXIT_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żki
NUL
nie może być użyty
.
jest cwd
, ..
rodzic
- przenośne nazwy plików
- użyj maksymalnie 14 znaków i 256 dla pełnej ścieżki
- może zawierać tylko:
a-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 zsetxattr
.
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