Le cose più importanti che POSIX 7 definisce
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, filati:
fork
, execl
, wait
, pipe
, semaphors sem_*
, memoria condivisa ( shm_*
) kill
, parametri di pianificazione ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- networking:
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 esempio fork
richiedono un concetto di processo.
Molte chiamate di sistema Linux esistono per implementare una funzione specifica API POSIX C e rendere conforme Linux, ad esempio sys_write
, sys_read
... Molti di questi hanno anche syscalls estensioni specifiche per Linux tuttavia.
Importante implementazione desktop Linux: glibc, che in molti casi fornisce solo un wrapper superficiale alle chiamate di sistema.
Utilità CLI
Ad esempio: cd
, ls
, echo
, ...
Molte utility sono front-end diretti della shell per una funzione API C corrispondente, ad es mkdir
.
Implementazione Maggiore Linux desktop: GNU Coreutils per i piccoli, progetti GNU separate per i grandi: sed
, grep
, awk
, ... Alcune utility CLI sono implementate da Bash come built-in .
Linguaggio shell
Per esempio, a=b; echo "$a"
Importante implementazione desktop Linux: GNU Bash .
Variabili ambientali
Ad esempio: HOME
, PATH
.
PATH
vengono specificate le semantiche di ricerca , incluso il modo inPATH
cui le barre impediscono la ricerca .
Stato di uscita del programma
ANSI C dice 0
o EXIT_SUCCESS
per il successo, EXIT_FAILURE
per il fallimento e lascia definita l'implementazione del resto.
POSIX aggiunge:
Espressione regolare
Esistono due tipi: BRE (base) ed ERE (estesa). Basic è obsoleto e mantenuto solo per non interrompere le API.
Questi sono implementati dalle funzioni dell'API C e utilizzati in tutti i programmi di utilità CLI, ad esempio grep
accetta BRE per impostazione predefinita ed ERE con -E
.
Per esempio: echo 'a.1' | grep -E 'a.[[:digit:]]'
Importante implementazione di Linux: glibc implementa le funzioni sotto regex.h che programmi simili grep
possono usare come backend.
Struture di directory
Ad esempio: /dev/null
,/tmp
Linux FHS estende notevolmente POSIX.
I nomi dei file
/
è il separatore di percorso
NUL
non può essere usato
.
è cwd
, ..
genitore
- nomi di file portatili
- utilizzare al massimo 14 caratteri e 256 per l'intero percorso
- può contenere solo:
a-zA-Z0-9._-
Vedi anche: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-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 esempio solo bandiere a lettera singola (ad es. -a
), Nessuna versione lunga con doppio trattino (ad es --all
.).
Alcune convenzioni ampiamente utilizzate:
-
significa stdin in cui è previsto un file
--
termina i flag, ad es. ls -- -l
per elencare una directory denominata-l
Vedi anche: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACLs" (Elenchi di controllo degli accessi), ad esempio utilizzati come backend per setfacl
.
Questo è stato ritirato ma è stato implementato in diversi sistemi operativi, incluso in Linux consetxattr
.
Chi è conforme a POSIX?
Molti sistemi seguono POSIX da vicino, ma pochi sono in realtà certificati da Open Group che mantiene lo standard. Notevoli quelli certificati includono:
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 all'indirizzo: https://www.opengroup.org/openbrand/register/ e anche nella pagina wiki .
finestre
Windows ha implementato POSIX su alcune delle sue distribuzioni professionali.
Poiché era una funzionalità opzionale, i programmatori non potevano farne affidamento per la maggior parte delle applicazioni per l'utente finale.
Il supporto è stato deprecato in Windows 8:
Nel 2016 è stata annunciata una nuova API ufficiale simile a Linux chiamata "Sottosistema Windows per Linux". Include chiamate di sistema Linux, ELF in esecuzione, parti del /proc
filesystem, Bash, GCC, (TODO probabilmente glibc?) apt-get
E altro: https://channel9.msdn.com/Events/Build/2016/P488 quindi credo che sia consentirà a Windows di eseguire molto, se non tutto, POSIX. Tuttavia, si concentra sugli sviluppatori / sulla distribuzione anziché sugli utenti finali. In particolare, non c'erano piani per consentire l'accesso alla GUI di Windows.
Panoramica storica della compatibilità ufficiale con Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin è un noto progetto GPL di terze parti per quello "fornisce sostanziali funzionalità API POSIX" per Windows, ma richiede che "ricostruisca l'applicazione dal sorgente se si desidera che funzioni su Windows". MSYS2 è un progetto correlato che sembra aggiungere più funzionalità su Cygwin.
androide
Android ha una propria libreria C (Bionic) che non supporta completamente POSIX da Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Livello bonus
Il Linux Standard Base estende ulteriormente POSIX.
Utilizza 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 il grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939