POSIX es una familia de estándares, especificados por IEEE, para clarificar y uniformar las interfaces de programación de aplicaciones (y cuestiones auxiliares, como las utilidades de shell de línea de comandos) proporcionadas por los sistemas operativos Unix-y. Cuando escribe sus programas para confiar en los estándares POSIX, puede estar bastante seguro de que podrá portarlos fácilmente entre una gran familia de derivados de Unix (¡incluido Linux, pero no limitado a él!); si y cuando usa alguna API de Linux que no está estandarizada como parte de Posix, tendrá más dificultades si desea migrar ese programa o biblioteca a otros sistemas Unix-y (por ejemplo, MacOSX) en el futuro.
Lo más importante que define POSIX 7
-
API de C
Amplia enormemente ANSI C con cosas como:
- más operaciones con archivos:
mkdir
,dirname
,symlink
,readlink
,link
(enlaces duros),poll()
,stat
,sync
,nftw()
- proceso y subprocesos:
fork
,execl
,wait
,pipe
, semáforossem_*
, memoria compartida (shm_*
),kill
, parámetros de programación (nice
,sched_*
),sleep
,mkfifo
,setpgid()
- redes:
socket()
- administración de memoria:
mmap
,mlock
,mprotect
,madvise
,brk()
- utilidades:expresiones regulares (
reg*
)
Esas API también determinan los conceptos de sistema subyacentes de los que dependen, p.
fork
requiere un concepto de proceso.Existen muchas llamadas al sistema Linux para implementar una función específica de la API de POSIX C y hacer que Linux sea compatible, p.
sys_write
,sys_read
, ... Sin embargo, muchas de esas llamadas al sistema también tienen extensiones específicas de Linux.Principal implementación de escritorio de Linux:glibc, que en muchos casos solo proporciona un envoltorio superficial para las llamadas al sistema.
- más operaciones con archivos:
-
Utilidades CLI
Por ejemplo:
cd
,ls
,echo
, ...Muchas utilidades son interfaces de shell directas para una función API de C correspondiente, p.
mkdir
.Implementación principal de escritorio de Linux:GNU Coreutils para los pequeños, proyectos GNU separados para los grandes:
sed
,grep
,awk
, ... Algunas utilidades CLI son implementadas por Bash como funciones integradas. -
Idioma de shell
Por ejemplo,
a=b; echo "$a"
Principal implementación de escritorio de Linux:GNU Bash.
-
Variables de entorno
Por ejemplo:
HOME
,PATH
.PATH
se especifica la semántica de búsqueda, incluida la forma en que las barras evitanPATH
búsqueda. -
Estado de salida del programa
ANSI C dice
0
oEXIT_SUCCESS
para el éxito,EXIT_FAILURE
por falla, y deja el resto de la implementación definida.POSIX agrega:
-
126
:comando encontrado pero no ejecutable. -
127
:comando no encontrado. -
> 128
:terminado por una señal.Pero POSIX no parece especificar el
128 + SIGNAL_ID
regla utilizada por Bash:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
-
-
Expresión regular
Hay dos tipos:BRE (Básico) y ERE (Extendido). Basic está en desuso y solo se mantiene para no romper las API.
Estos se implementan mediante funciones de la API de C y se utilizan en todas las utilidades de la CLI, p.
grep
acepta BRE por defecto y ERE con-E
.Por ejemplo:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Implementación principal de Linux:glibc implementa las funciones bajo regex.h que programas como
grep
puede usar como backend. -
Estructura del directorio
Por ejemplo:
/dev/null
,/tmp
Linux FHS amplía enormemente POSIX.
-
Nombres de archivo
/
es el separador de rutaNUL
no se puede usar.
escwd
,..
padre- nombres de archivos portátiles
- use como máximo 14 caracteres y 256 para la ruta completa
- solo puede contener:
a-zA-Z0-9._-
Consulte también:¿Qué es el cumplimiento posix para el sistema de archivos?
-
Convenciones de la API de la utilidad de línea de comandos
No obligatorio, utilizado por POSIX, pero casi en ningún otro lugar, especialmente en GNU. Pero es cierto, es demasiado restrictivo, p. banderas de una sola letra solamente (por ejemplo,
-a
), sin versiones largas con doble guión (por ejemplo,--all
).Algunas convenciones ampliamente utilizadas:
-
significa stdin donde se espera un archivo--
termina las banderas, p.ls -- -l
para listar un directorio llamado-l
Consulte también:¿Existen estándares para los parámetros y argumentos de la línea de comandos de Linux?
-
"POSIX ACL" (Listas de control de acceso), p. como se usa como backend para
setfacl
.Esto se retiró pero se implementó en varios sistemas operativos, incluso en Linux con
setxattr
.
¿Quién se ajusta a POSIX?
Muchos sistemas siguen de cerca a POSIX, pero pocos están realmente certificados por Open Group, que mantiene el estándar. Los certificados notables incluyen:
- OS X (Apple) X significa 10 y UNIX. Fue el primer sistema POSIX de Apple, lanzado alrededor de 2001. Consulte también:¿Es OSX un sistema operativo POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oraculo)
La mayoría de las distribuciones de Linux son muy compatibles, pero no están certificadas porque no quieren pagar el cheque de cumplimiento. K-UX de Inspur y EulerOS de Huawei son dos ejemplos certificados.
La lista oficial de sistemas certificados se encuentra en:https://www.opengroup.org/openbrand/register/ y también en la página wiki.
Ventanas
Windows implementó POSIX en algunas de sus distribuciones profesionales.
Dado que era una función opcional, los programadores no podían confiar en ella para la mayoría de las aplicaciones de los usuarios finales.
El soporte quedó obsoleto en Windows 8:
- ¿Dónde se encuentra actualmente la implementación de POSIX de Microsoft Windows 7?
- https://superuser.com/questions/495360/sigue-windows-8-implementando-posix
- Solicitud de función:https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
En 2016, se anunció una nueva API oficial similar a Linux llamada "Subsistema de Windows para Linux". Incluye llamadas al sistema Linux, ejecución de ELF, partes del /proc
sistema de archivos, Bash, GCC, (TODO probablemente glibc?), apt-get
y más:https://channel9.msdn.com/Events/Build/2016/P488, así que creo que permitirá que Windows ejecute gran parte, si no todo, de POSIX. Sin embargo, se centra en los desarrolladores/implementación en lugar de los usuarios finales. En particular, no había planes para permitir el acceso a la GUI de Windows.
Resumen histórico de la compatibilidad oficial de Microsoft POSIX:http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin es un proyecto de terceros GPL bien conocido porque "proporciona una funcionalidad API POSIX sustancial" para Windows, pero requiere que "reconstruya su aplicación desde el origen si desea que se ejecute en Windows". MSYS2 es un proyecto relacionado que parece agregar más funciones además de Cygwin.
Android tiene su propia biblioteca C (Bionic) que no es completamente compatible con POSIX a partir de Android O:¿Es Android compatible con POSIX?
Nivel de bonificación
La base estándar de Linux amplía aún más POSIX.
Use los índices sin marcos, son mucho más fáciles de leer y buscar:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenga una versión comprimida completa de las páginas HTML para grepping:¿Dónde está la lista de funciones de la API POSIX C?
POSIX es:
POSIX (pronunciado /ˈpɒzɪks/) o "Interfaz de sistema operativo portátil [para Unix]"1 es el nombre de una familia de estándares relacionados especificados por IEEE para definir la interfaz de programación de aplicaciones (API), junto con interfaces de shell y utilidades para software compatible con variantes de Unix sistema operativo, aunque el estándar puede aplicarse a cualquier sistema operativo.
Básicamente, era un conjunto de medidas para aliviar el dolor del desarrollo y el uso de diferentes sabores de UNIX al tener una API y utilidades (en su mayoría) comunes. El cumplimiento limitado de POSIX también se extendió a varias versiones de Windows.