CUESTIÓN

Para poder dar un valor inicial a un semáforo en Solaris, hay que usar la unión union semun. Esta unión tiene tres campos. ¿Cómo hay que rellenar los tres campos?

SOLUCIÓN

Para obtener respuesta a esta pregunta hay que saber cómo funciona una union en C. En esencia, una unión es como una estructura salvo por una sutileza: todos los campos de una unión se almacenan en la misma posición de memoria.

Tan extraña característica hace que, por ejemplo, en:
     union semun 
        {int             val;
         struct semid_ds *buf;
         ushort_t        *array;
         } s;
si yo asigno el valor 7 al campo val (s.val=7) y, a continuación, doy valor a otro campo de la estructura, por ejemplo, s.buf=0x1234;, esta segunda asignación machaca a la primera. Ya no obtenemos 7 al leer s.val.

Las uniones son construcciones de bajo nivel y no debieran usarse en programación de propósito general. A veces se usan cuando:
© 2002 Guillermo González Talaván.