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.