Este escrito ha sido aprobado por nuestros especialistas para que tengas la seguridad de la exactitud de esta reseña.
Solución:
POSIX es una familia de estándares, especificada por el IEEE, para aclarar 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 que se basen en los estándares POSIX, puede estar bastante seguro de poder portarlos fácilmente entre una gran familia de derivados de Unix (incluido Linux, ¡pero no limitado a él!); si usa alguna API de Linux que no está estandarizada como parte de Posix, tendrá más dificultades si desea portar ese programa o biblioteca a otros sistemas Unix-y (por ejemplo, MacOSX) en el futuro.
Las cosas más importantes que define POSIX 7
-
API C
Amplía enormemente ANSI C con cosas como:
- más operaciones de archivo:
mkdir
,dirname
,symlink
,readlink
,link
(enlaces duros),poll()
,stat
,sync
,nftw()
- proceso e hilos:
fork
,execl
,wait
,pipe
, semaforassem_*
, memoria compartida (shm_*
),kill
, programación de parámetros (nice
,sched_*
),sleep
,mkfifo
,setpgid()
- redes:
socket()
- gestión de la memoria:
mmap
,mlock
,mprotect
,madvise
,brk()
- utilidades: expresiones regulares (
reg*
)
Esas API también determinan los conceptos subyacentes del sistema de los que dependen, p. Ej.
fork
requiere un concepto de proceso.Existen muchas llamadas al sistema Linux para implementar una función API POSIX C específica y hacer que Linux sea compatible, p. Ej.
sys_write
,sys_read
, … Sin embargo, muchas de esas llamadas al sistema también tienen extensiones específicas de Linux.Implementación principal de escritorio de Linux: glibc, que en muchos casos solo proporciona una envoltura superficial para las llamadas al sistema.
- más operaciones de archivo:
-
Utilidades CLI
P.ej:
cd
,ls
,echo
…Muchas utilidades son interfaces de shell directas para una función API de C correspondiente, p. Ej.
mkdir
.Implementación principal de escritorio Linux: GNU Coreutils para los pequeños, proyectos GNU separados para los grandes:
sed
,grep
,awk
, … Bash implementa algunas utilidades CLI como integradas. -
Lenguaje de shell
P.ej,
a=b; echo "$a"
Implementación principal de escritorio de Linux: GNU Bash.
-
Variables de entorno
P.ej:
HOME
,PATH
.PATH
se especifica la semántica de búsqueda, incluida la forma en que las barras evitanPATH
buscar. -
Estado de salida del programa
ANSI C dice
0
oEXIT_SUCCESS
para el éxito,EXIT_FAILURE
por falla, y deja definida la implementación del resto.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 API C y se utilizan en todas las utilidades de CLI, p. Ej.
grep
acepta BRE de forma predeterminada y ERE con-E
.P.ej:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Implementación principal de Linux: glibc implementa las funciones bajo regex.h que programas como
grep
se puede utilizar como backend. -
Estructura de directorios
P.ej:
/dev/null
,/tmp
Linux FHS amplía enormemente POSIX.
-
Nombres de archivo
/
es el separador de rutaNUL
No puede ser usado.
escwd
,..
padre- nombres de archivo portátiles
- use como máximo 14 caracteres como máximo y 256 para la ruta completa
- solo puede contener:
a-zA-Z0-9._-
Ver también: ¿que es el cumplimiento de posix para el sistema de archivos?
-
Convenciones de la API de la utilidad de línea de comandos
No es obligatorio, utilizado por POSIX, pero casi en ningún otro lugar, especialmente no en GNU. Pero true, es demasiado restrictivo, p. ej., banderas de una sola letra (p. ej.
-a
), no hay versiones largas con guiones dobles (p. ej.--all
).Algunas convenciones ampliamente utilizadas:
-
significa stdin donde se espera un archivo--
termina banderas, p. ej.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), por ejemplo, como se utiliza 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 tanto 10 como UNIX. Fue el primer sistema POSIX de Apple, lanzado alrededor de 2001. Consulte también: ¿OSX es un sistema operativo POSIX?
- AIX (IBM)
- HP-UX (HP)
- Solaris (Oracle)
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 usuario final.
El soporte quedó obsoleto en Windows 8:
- ¿Dónde se encuentra actualmente la implementación POSIX de Microsoft Windows 7?
- https://superuser.com/questions/495360/does-windows-8-still-implement-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, ELF en ejecución, 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 en 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 que “proporciona una funcionalidad sustancial de la API POSIX” para Windows, pero requiere que “reconstruya su aplicación desde la fuente si desea que se ejecute en Windows”. MSYS2 es un proyecto relacionado que parece agregar más funcionalidad a Cygwin.
Androide
Android tiene su propia biblioteca C (Bionic) que no es totalmente compatible con POSIX a partir de Android O: ¿Es compatible con POSIX de Android?
Nivel de bonificación
La base estándar de Linux amplía aún más POSIX.
Utilice los índices sin marcos, son mucho más legibles y se pueden 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
[for Unix]”1 es el nombre de una familia de estándares relacionados especificados por el IEEE para definir la interfaz de programación de aplicaciones (API), junto con interfaces de shell y utilidades para software compatible con variantes del sistema operativo Unix, aunque el estándar puede aplicarse a cualquier sistema.
Básicamente, era un conjunto de medidas para aliviar el dolor del desarrollo y el uso de diferentes versiones 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.
valoraciones y reseñas
Si aceptas, eres capaz de dejar una reseña acerca de qué le añadirías a este enunciado.