Cosas más importantes que POSIX 7 define
API C
Extiende enormemente ANSI C con cosas como:
- más operaciones de archivo:
mkdir
, dirname
, symlink
, readlink
, link
(enlaces duros), poll()
, stat
, sync
,nftw()
- proceso y los hilos:
fork
, execl
, wait
, pipe
, semaphors sem_*
, la memoria compartida ( shm_*
), kill
, parámetros de programación ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- redes:
socket()
- gestió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, por ejemplo, fork
requiere un concepto de proceso.
Muchas llamadas al sistema Linux existen para implementar una función específica API POSIX C y hacer que Linux compatible, por ejemplo sys_write
, sys_read
, ... Muchas de esas llamadas al sistema también tienen extensiones específicas de Linux sin embargo.
Implementación principal de escritorio de Linux: glibc, que en muchos casos solo proporciona una envoltura superficial para las llamadas al sistema.
Utilidades CLI
Por ejemplo: cd
, ls
, echo
, ...
Muchas empresas de servicios están frente al shell directa termina para una función C API correspondiente, por ejemplo mkdir
.
Mayor Linux aplicación de escritorio: GNU coreutils para los más pequeños, proyectos GNU separadas para los grandes: sed
, grep
, awk
, ... Algunas de las utilidades de la CLI son implementadas por Bash como muebles empotrados .
Lenguaje de shell
P.ej, a=b; echo "$a"
Implementación principal 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 impiden la PATH
búsqueda .
Estado de salida del programa
ANSI C dice 0
o EXIT_SUCCESS
para el éxito, EXIT_FAILURE
para el fracaso, y deja el resto de la implementación definida.
POSIX agrega:
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.
Esos son implementados por las funciones de la API de C y se utilizan en todas las utilidades de CLI, por ejemplo, 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
pueden usarse como backend.
Estructura de directorio
Por ejemplo: /dev/null
,/tmp
El FHS de Linux extiende mucho POSIX.
Nombres de archivo
/
es el separador de ruta
NUL
No puede ser usado
.
es cwd
, ..
los padres
- nombres de archivos portátiles
- utilizar como máximo 14 caracteres y 256 para la ruta completa
- solo puede contener:
a-zA-Z0-9._-
Ver también: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Convenciones de API de utilidad de línea de comando
No obligatorio, utilizado por POSIX, pero casi en ningún otro lugar, especialmente en GNU. Pero es cierto, es demasiado restrictivo, por ejemplo, solo banderas de una letra (por ejemplo -a
), no hay versiones largas de doble guión (por ejemplo --all
).
Algunas convenciones ampliamente utilizadas:
-
significa stdin donde se espera un archivo
--
termina banderas, por ejemplo, ls -- -l
para enumerar un directorio llamado-l
Ver también: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACL" (Listas de control de acceso), por ejemplo, tal como se usa como backend setfacl
.
Esto se retiró pero se implementó en varios sistemas operativos, incluso en Linux consetxattr
.
¿Quién se ajusta a POSIX?
Muchos sistemas siguen a POSIX de cerca, pero pocos están realmente certificados por Open Group, que mantiene el estándar. Los certificados notables incluyen:
La mayoría de las distribuciones de Linux son muy compatibles, pero no están certificadas porque no quieren pagar la verificación de cumplimiento. El K-UX de Inspur y el 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.
Como era una característica opcional, los programadores no podían confiar en ella para la mayoría de las aplicaciones de usuario final.
El soporte quedó en desuso en Windows 8:
En 2016 se anunció una nueva API oficial similar a Linux llamada "Windows Subsystem for Linux". Incluye llamadas al sistema Linux, ejecución 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 mucho, si no todo, POSIX. Sin embargo, se centra en desarrolladores / despliegue en lugar de usuarios finales. En particular, no había planes para permitir el acceso a la GUI de Windows.
Descripción histórica de la compatibilidad oficial de Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin es un conocido proyecto de terceros de la GPL que "proporciona una funcionalidad sustancial de API POSIX" 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 funcionalidades además de Cygwin.
Androide
Android tiene su propia biblioteca C (Bionic) que no es totalmente compatible con POSIX a partir de Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
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 buscables: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenga una versión comprimida completa de las páginas HTML para grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939