POSIX è una famiglia di standard, specificata dall'IEEE, per chiarire e rendere uniformi le interfacce di programmazione delle applicazioni (e questioni accessorie, come le utilità della shell a riga di comando) fornite dai sistemi operativi Unix-y. Quando scrivi i tuoi programmi per fare affidamento sugli standard POSIX, puoi essere abbastanza sicuro di poterli portare facilmente tra una grande famiglia di derivati Unix (incluso Linux, ma non limitato a questo!); se e quando utilizzi un'API Linux che non è standardizzata come parte di Posix, avrai difficoltà se e quando vorrai portare quel programma o libreria su altri sistemi Unix-y (ad esempio, MacOSX) in futuro.
Le cose più importanti definite da POSIX 7
-
API C
Estende notevolmente ANSI C con cose come:
- altre operazioni sui file:
mkdir
,dirname
,symlink
,readlink
,link
(collegamenti fisici),poll()
,stat
,sync
,nftw()
- processo e thread:
fork
,execl
,wait
,pipe
, semaforisem_*
, memoria condivisa (shm_*
),kill
, parametri di pianificazione (nice
,sched_*
),sleep
,mkfifo
,setpgid()
- rete:
socket()
- gestione della memoria:
mmap
,mlock
,mprotect
,madvise
,brk()
- utilità:espressioni regolari (
reg*
)
Tali API determinano anche i concetti di sistema sottostanti da cui dipendono, ad es.
fork
richiede un concetto di processo.Esistono molte chiamate di sistema Linux per implementare una specifica funzione API C POSIX e rendere Linux conforme, ad es.
sys_write
,sys_read
, ... Tuttavia, molte di queste chiamate di sistema hanno anche estensioni specifiche per Linux.Principale implementazione desktop di Linux:glibc, che in molti casi fornisce solo un involucro poco profondo alle chiamate di sistema.
- altre operazioni sui file:
-
Utilità CLI
Ad esempio:
cd
,ls
,echo
, ...Molte utilità sono front-end shell diretti per una funzione API C corrispondente, ad es.
mkdir
.Principali implementazioni desktop Linux:GNU Coreutils per i più piccoli, progetti GNU separati per i più grandi:
sed
,grep
,awk
, ... Alcune utility CLI sono implementate da Bash come built-in. -
Linguaggio shell
Ad esempio,
a=b; echo "$a"
Principale implementazione desktop Linux:GNU Bash.
-
Variabili d'ambiente
Ad esempio:
HOME
,PATH
.PATH
viene specificata la semantica della ricerca, incluso il modo in cui le barre impedisconoPATH
ricerca. -
Stato di uscita dal programma
ANSI C dice
0
oEXIT_SUCCESS
per il successo,EXIT_FAILURE
in caso di errore e lascia definita l'implementazione restante.POSIX aggiunge:
-
126
:comando trovato ma non eseguibile. -
127
:comando non trovato. -
> 128
:terminato da un segnale.Ma POSIX non sembra specificare il
128 + SIGNAL_ID
regola usata da Bash:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
-
-
Espressione regolare
Esistono due tipi:BRE (di base) ed ERE (esteso). Basic è deprecato e mantenuto solo per non violare le API.
Questi sono implementati dalle funzioni API C e utilizzati in tutte le utility CLI, ad es.
grep
accetta BRE per impostazione predefinita e ERE con-E
.Ad esempio:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Principale implementazione di Linux:glibc implementa le funzioni sotto regex.h quali programmi come
grep
può utilizzare come back-end. -
Struttura della directory
Ad esempio:
/dev/null
,/tmp
Linux FHS estende notevolmente POSIX.
-
Nomi file
/
è il separatore di percorsoNUL
non può essere utilizzato.
ècwd
,..
genitore- nomi di file portatili
- usa al massimo 14 caratteri e 256 per il percorso completo
- può contenere solo:
a-zA-Z0-9._-
Vedi anche:cos'è la conformità posix per il filesystem?
-
Convenzioni API dell'utilità della riga di comando
Non obbligatorio, utilizzato da POSIX, ma quasi da nessun'altra parte, in particolare non in GNU. Ma vero, è troppo restrittivo, ad es. solo flag a lettera singola (ad es.
-a
), nessuna versione lunga con doppio trattino (ad es.--all
).Alcune convenzioni ampiamente utilizzate:
-
significa stdin dove è previsto un file--
termina i flag, ad es.ls -- -l
per elencare una directory denominata-l
Vedi anche:Esistono degli standard per le opzioni e gli argomenti della riga di comando di Linux?
-
"POSIX ACL" (elenchi di controllo degli accessi), ad es. usato come backend per
setfacl
.Questo è stato ritirato ma è stato implementato in diversi sistemi operativi, incluso Linux con
setxattr
.
Chi è conforme a POSIX?
Molti sistemi seguono da vicino POSIX, ma pochi sono effettivamente certificati dall'Open Group che mantiene lo standard. Quelli certificati degni di nota includono:
- OS X (Apple) X sta per 10 e UNIX. È stato il primo sistema Apple POSIX, rilasciato intorno al 2001. Vedi anche:OSX è un sistema operativo POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oracolo)
La maggior parte delle distribuzioni Linux sono molto conformi, ma non certificate perché non vogliono pagare il controllo di conformità. K-UX di Inspur e EulerOS di Huawei sono due esempi certificati.
L'elenco ufficiale dei sistemi certificati è disponibile su:https://www.opengroup.org/openbrand/register/ e anche sulla pagina wiki.
Finestre
Windows ha implementato POSIX su alcune delle sue distribuzioni professionali.
Poiché si trattava di una funzionalità opzionale, i programmatori non potevano fare affidamento su di essa per la maggior parte delle applicazioni degli utenti finali.
Il supporto è stato deprecato in Windows 8:
- Dove si trova attualmente l'implementazione POSIX di Microsoft Windows 7?
- https://superuser.com/questions/495360/does-windows-8-still-implement-posix
- Richiesta di funzionalità:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
Nel 2016 è stata annunciata una nuova API ufficiale simile a Linux chiamata "Windows Subsystem for Linux". Include chiamate di sistema Linux, ELF in esecuzione, parti del /proc
filesystem, Bash, GCC, (TODO probabilmente glibc?), apt-get
e altro ancora:https://channel9.msdn.com/Events/Build/2016/P488 quindi credo che consentirà a Windows di eseguire gran parte, se non tutto, di POSIX. Tuttavia, si concentra sugli sviluppatori/distribuzione invece che sugli utenti finali. In particolare, non c'erano piani per consentire l'accesso alla GUI di Windows.
Panoramica storica della compatibilità ufficiale Microsoft POSIX:http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin è un noto progetto di terze parti GPL per il fatto che "fornisce sostanziali funzionalità API POSIX" per Windows, ma richiede di "ricostruire l'applicazione dal sorgente se si desidera che venga eseguita su Windows". MSYS2 è un progetto correlato che sembra aggiungere più funzionalità a Cygwin.
Android
Android ha la propria libreria C (Bionic) che non supporta completamente POSIX a partire da Android O:Android POSIX è compatibile?
Livello bonus
La Linux Standard Base estende ulteriormente POSIX.
Usa gli indici non frame, sono molto più leggibili e ricercabili:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Ottieni una versione zippata completa delle pagine HTML per grepping:dov'è l'elenco delle funzioni dell'API C POSIX?
POSIX è:
POSIX (pronunciato /ˈpɒzɪks/) o"Portable Operating System Interface[per Unix]"1 è il nome di una famiglia di standard correlati specificati dall'IEEE per definire l'interfaccia di programmazione dell'applicazione (API), insieme alle interfacce di shell e utilità per il software compatibile con le varianti di Unix sistema operativo, anche se lo standard può essere applicato a qualsiasi sistema operativo.
Fondamentalmente era un insieme di misure per alleviare il dolore dello sviluppo e dell'utilizzo di diverse versioni di UNIX avendo un'API e utilità (per lo più) comuni. Conformità POSIX limitata estesa anche a varie versioni di Windows.