Primeros pasos con POSIX

¿Qué es POSIX?

POSIX significa “Interfaz de sistema operativo portátil” y define un conjunto de estándares para proporcionar compatibilidad entre diferentes plataformas informáticas. La versión actual del estándar es IEEE 1003.1 2016 y se puede acceder desde OpenGroup [especificación POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm). Las versiones anteriores incluyen POSIX 2004 y POSIX 1997. La edición POSIX 2016 es esencialmente POSIX 2008 más errata (también hubo una versión POSIX 2013).

POSIX define varias interfaces de herramientas, comandos y API para sistemas operativos similares a UNIX y otros.

Se considera que lo siguiente está dentro del alcance de la estandarización POSIX:

  • Interfaz del sistema (funciones, macros y variables externas)
  • Intérprete de comandos, o Shell (la utilidad sh)
  • Utilidades (como more, cat, ls)

Fuera del alcance de POSIX:

  • Interfaces SGBD
  • Interfaces gráficas
  • Portabilidad de código binario

Hola Mundo

Un simple programa Hello, World sin comprobación de errores:

#include <unistd.h> /* For write() and STDOUT_FILENO */
#include <stdlib.h> /* For EXIT_SUCCESS and EXIT_FAILURE */

int main(void) {
        char hello[] = "Hello, World\n";
        
        /* Attempt to write `hello` to standard output file */
        write(STDOUT_FILENO, hello, sizeof(hello) - 1);

        return EXIT_SUCCESS; 
}

Y con la comprobación de errores:

#include <unistd.h> /* For write() and STDOUT_FILENO */
#include <stdlib.h> /* For EXIT_SUCCESS and EXIT_FAILURE */

int main(void) {
        char hello[] = "Hello, World\n";
        ssize_t ret = 0;
        
        /* Attempt to write `hello` to standard output file */
        ret = write(STDOUT_FILENO, hello, sizeof(hello) - 1);

        if (ret == -1) {
                /* write() failed. */
                return EXIT_FAILURE;
        } else if (ret != sizeof(hello) - 1) {
                /* Not all bytes of `hello` were written. */
                return EXIT_FAILURE;
        }

        return EXIT_SUCCESS; 
}

Compilando y ejecutando

Si el código que se muestra arriba (cualquiera de las versiones) está almacenado en el archivo hello.c, puede compilar el código en un programa hello utilizando [c99](http://pubs.opengroup.org/onlinepubs /9699919799/utilidades/c99.html) o make. Por ejemplo, en un modo estrictamente compatible con POSIX, en teoría podría compilar y ejecutar el programa usando:

$ make hello
c99 -o hello hello.c
$ ./hello
Hello, World
$

La mayoría de las implementaciones reales de make usarán un compilador de C diferente (quizás cc, quizás gcc, clang, xlc o algún otro nombre), y muchas usarán más opciones para el compilador. Claramente, podría simplemente escribir el comando que make ejecuta directamente en la línea de comando.