GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il significato di POSIX?

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

  1. 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 , 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 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.

  2. 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.

  3. Linguaggio shell

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

    Principale implementazione desktop Linux:GNU Bash.

  4. Variabili d'ambiente

    Ad esempio:HOME , PATH .

    PATH viene specificata la semantica della ricerca, incluso il modo in cui le barre impediscono PATH ricerca.

  5. Stato di uscita dal programma

    ANSI C dice 0 o EXIT_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

  6. 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.

  7. Struttura della directory

    Ad esempio:/dev/null , /tmp

    Linux FHS estende notevolmente POSIX.

  8. Nomi file

    • / è il separatore di percorso
    • NUL 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?

  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 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?

  10. "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.


Linux
  1. Qual è l'equivalente di Posix popen() nell'API Win32?

  2. Qual è il significato di *nix?

  3. Qual è il significato di fork() e grep in Linux?

  4. Qual è il significato di un doppio segno di dollaro in bash/Makefile?

  5. Qual è il significato di `! -d` in questo comando Bash?

Che cos'è la shell in Linux?

iptables vs nftables:qual è la differenza?

Qual è il comando kill in Linux?

Che cos'è la vulnerabilità di Logjam?

Qual è il significato di curl -k -i -X ​​in Linux?

Cos'è il file system NSFS?