it-swarm.it

Che cos'è esattamente POSIX?

Vedo POSIX menzionato spesso e ovunque, e avevo ipotizzato che fosse lo standard UNIX di base ... finché non ho notato il seguente estratto su una pagina di Wikipedia: The Open Group =

Open Group è famoso soprattutto come ente di certificazione per il marchio UNIX e la sua pubblicazione dello Standard tecnico unico UNIX Specification, che si estende gli standard POSIX ed è la definizione ufficiale di un sistema UNIX.

Se la definizione ufficiale di un sistema UNIX è un'estensione di POSIX, che cos'è esattamente POSIX? , Sicuramente sembra essere una pietra miliare del mondo UNIX, ma non so come si adatta al quadro generale.

144
Peter.O

POSIX era uno standard per la prima volta nel 1988 molto prima della specifica UNIX singola. È stato uno dei tentativi di unificare tutte le varie forcelle UNIX e sistemi simili a UNIX. POSIX è uno standard IEEE, ma poiché IEEE non possiede il marchio UNIX®, lo standard non è UNIX® sebbene sia basato sull'API UNIX esistente in quel momento. Il primo standard POSIX.1 è formalmente noto come IEEE std 1003.1-1988. [ 1 ] IEEE ha addebitato una commissione sostanziale per ottenere una copia dello standard.

Il gruppo Open ha rilasciato la specifica UNIX singola (SUSv2) nel 1997 sulla base del lavoro IEEE dello standard POSIX. SUSv3 è stato rilasciato nel 2001 da un gruppo di lavoro congiunto tra IEEE e The Open Group noto come Austin Group. SUSv3 è anche noto come POSIX: 2001 [ 2 ]. Ora c'è anche POSIX: 2004 e POSIX: 2008 che è il nucleo di SUSv4. Per quanto riguarda ciò che è UNIX®, UNIX® è qualunque sia l'attuale detentore del marchio registrato . Dal 1994, questo è The Open Group.

Novell ha acquisito il business dei sistemi UNIX da AT & T/USL, dove è nato UNIX®. Nel 1994, hanno venduto il diritto al marchio UNIX® a X/Open [] ora noto come The Open Group. Hanno quindi venduto il codice sorgente UNIX® a SCO come UNIXWARE®. [] UNIX® stesso ha biforcuto molte volte [ 4 ] [ 5 ] in parte dovuto al modello di licenza di AT&T. L'acquisto di UNIX® ti ha fornito la fonte completa del sistema operativo e l'intera catena di strumenti per costruirla. Le modifiche alla fonte possono essere distribuite e utilizzate da chiunque che possedevano una licenza per UNIX® di AT&T. Il canone era di migliaia.

BSD era un progetto a Berkeley che ha aggiunto una serie di miglioramenti al sistema operativo UNIX®. Il codice BSD è stato rilasciato con una licenza molto più liberale rispetto alla fonte di AT&T e non ha richiesto una tassa di licenza o addirittura un requisito da distribuire con la fonte, a differenza della GPL che il GNU e Linux usa. Ciò ha comportato l'inclusione di buona parte del codice BSD con varie forcelle UNIX commerciali. A circa 4.3BSD, avevano quasi sostituito qualsiasi necessità del codice sorgente UNIX® AT&T originale. FreeBSD/NetBSD/OpenBSD sono tutte forcelle di 4.3BSD che sono un sistema operativo completo e non dispongono del codice sorgente AT&T originale, né hanno diritto al marchio UNIX®, ma gran parte del loro codice è utilizzato dai sistemi operativi UNIX commerciali. L'API Socket utilizzata su UNIX è stata sviluppata su BSD e il codice Unix Fast Filesystem è stato preso in prestito e utilizzato su vari sistemi operativi UNIX come Solaris con i propri miglioramenti.

Linux è stato sviluppato nel 1991, ma è stato sviluppato da zero a differenza di BSD e utilizza l'attuale GNU che è un'implementazione in camera bianca di gran parte dello spazio utente UNIX. Implementa gran parte di POSIX per compatibilità ed è simile a UNIX nella progettazione, ma non ha la stretta connessione con AT&T o UNIX® dei BSD.

130
penguin359

Le cose più importanti POSIX 7 definisce

  1. API C

    Greatly estende ANSI C con cose come:

    • più operazioni sui file: mkdir, dirname, symlink, readlink, link (hardlink), poll() , stat, sync, nftw()
    • processo e thread: fork, execl, wait , pipe, semafori sem_* , 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 l'idea di un processo.

    Esistono molti chiamate di sistema Linux per implementare una specifica funzione API POSIX C e rendere conforme Linux, ad es. sys_write, sys_read, ... Molte di quelle syscall hanno comunque estensioni specifiche di Linux.

    Importante implementazione desktop Linux: glibc, che in molti casi fornisce solo un wrapper superficiale per le chiamate di sistema.

  2. tilità CLI

    Ad es .: cd, ls, echo, ...

    Molte utility sono front-end Shell diretti per una funzione API C corrispondente, ad es. mkdir.

    Importante implementazione desktop Linux: GNU Coreutils per i più piccoli, separato GNU progetti per i più grandi: sed, grep, awk, ... Alcune utility della CLI sono implementate da Bash come built-in .

  3. Shell lingua

    Ad esempio, a=b; echo "$a"

    Importante implementazione desktop Linux: GNU Bash .

  4. Variabili d'ambiente

    Ad es .: HOME, PATH.

    PATHsono specificate le semantiche di ricerca , incluso come le barre impediscono PATH search .

  5. Stato uscita programma

    ANSI C indica 0 O EXIT_SUCCESS Per il successo, EXIT_FAILURE Per errore e lascia definita l'implementazione del resto.

    POSIX aggiunge:

  6. 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 nelle utility della CLI, ad es. grep accetta BREs per impostazione predefinita ed ERE con -E.

    Ad esempio: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Importante implementazione di Linux: glibc implementa le funzioni in regex.h che programmi come grep possono usare come backend.

  7. Directory struture

    Ad esempio: /dev/null, /tmp

    Linux FHS estende notevolmente POSIX.

  8. I nomi dei file

    • / È il separatore di percorso
    • NUL non può essere utilizzato
    • . È cwd, .. Padre
    • 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

  9. 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 in cui è previsto un file
    • -- Termina i flag, ad es. ls -- -l Per elencare una directory chiamata -l

    Vedi anche: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "ACL POSIX" (Elenchi controllo accessi), ad es. usato come backend per setfacl .

    Questo è stato ritirato ma è stato implementato in diversi sistemi operativi, incluso in Linux con setxattr .

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à. Inspur's K-UX e Huawei's EulerOS sono due esempi certificati.

L'elenco ufficiale dei sistemi certificati è disponibile su: https://www.opengroup.org/openbrand/register/ e anche su pagina wiki .

di Windows

Windows ha implementato POSIX su alcune delle sue distribuzioni professionali.

Dato che era una funzione opzionale, i programmatori non potevano fare affidamento su di esso 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 filesystem /proc, Bash, GCC, (TODO probabilmente glibc?), apt-get E altro: https: // channel9. msdn.com/Events/Build/2016/P488 quindi credo che 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 dall'origine se si desidera che venga eseguita su Windows". MSYS2 è un progetto correlato che sembra aggiungere più funzionalità su Cygwin.

Android

Android ha una propria libreria C (Bionic) che non supporta completamente POSIX a partire da Android O: https://stackoverflow.com/questions/27604455/is-Android-posix compatibile

Livello bonus

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

POSIX è lo standard del sistema operativo portatile. Descrive alcune utilità, API e servizi che un sistema operativo conforme deve fornire al software (ad esempio socket, I/O dei file e threading) insieme a convenzioni su come devono essere chiamati da un programma.

L'idea è che un programma scritto per un sistema operativo compatibile POSIX sarebbe più facile da trasferire su un altro sistema operativo compatibile POSIX piuttosto che il trasferimento tra sistemi operativi non compatibili POSIX. Questo è il motivo per cui è molto più facile portare un'applicazione da, per esempio, FreeBSD su Linux piuttosto che portarla da FreeBSD a Windows (sebbene Windows supporti apparentemente un sottoinsieme di POSIX).

16
Andrew Lambert

POSIX è un sottoinsieme di UNIX destinato a coprire vari ambienti simili a Unix per altri sistemi operativi; questo includeva originariamente ambienti come Eunice per VMS, la personalità POSIX di Windows NT e Apollo Domain/OS. Puoi considerarlo come un'API portabilità standard per il sottoinsieme di servizi del sistema operativo il cui comportamento è comune tra Unix e non Unix. Vedere http://standards.ieee.org/develop/wg/POSIX.html per ulteriori informazioni.

14
geekosaur