Programación concurrente en Linux

    // procesos.c
    // Prueba de procesos.
    /////////////////////////////////////////////////////////////////

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>

    int main (int argc, const char * argv[]) {
        int id, i;
        char dato= '0';
        char mensaje[80];

        srandom(time(NULL));  // Para mayor aleatoriedad en las ejecuciones.

        sprintf(mensaje, "--Punto 0  >>> %d: dato= %c\n", getpid(), dato);
        write(1, mensaje, strlen(mensaje));
        switch (id= fork()) {
          case -1:
            perror("fork");
            exit(1);
          case 0:
            sleep(random()%5);
            sprintf(mensaje, "--Punto 1  >>> %d: dato= %c\n", getpid(), dato);
            write(1, mensaje, strlen(mensaje));
            dato= 'a';
            for (i=0; i<5; i++) {
               sleep(random()%5);
               sprintf(mensaje, "--Punto 2.%d>>> %d: dato= %c\n", i, getpid(), dato);
               write(1, mensaje, strlen(mensaje));
               dato++;
            }
            break;
          default:
            sleep(random()%5);
            sprintf(mensaje, "--Punto 3  >>> %d: dato= %c\n", getpid(), dato);
            write(1, mensaje, strlen(mensaje));
            dato= 'A';
            for (i=0; i<5; i++) {
               sleep(random()%5);
               sprintf(mensaje, "--Punto 4.%d>>> %d: dato= %c\n", i, getpid(), dato);
               write(1, mensaje, strlen(mensaje));
               dato++;
            }
        }
        sprintf(mensaje, "--Punto 5  >>> %d: dato= %c\n", getpid(), dato);
        write(1, mensaje, strlen(mensaje));
        exit(0);
    }