[so] [IPC2] msgbuf_t
Lucian Adrian Grijincu
lucian.grijincu at gmail.com
Sat Apr 12 19:48:50 EEST 2008
2008/4/12 Daniel Baluta <daniel.baluta at gmail.com>:
> Salut,
>
> In laboratorul de IPC2 aveam definita structura
>
> typedef struct msgbuf
> {
> long type;
> char mtext[0];
> } msgbuf_t;
>
Scuze, unde era definită structura asta?
Standardele care definesc modul de functionare a msgsnd, msgrcv (SVr4,
POSIX.1-2001) spun în mod explicit:
The msgp argument is a pointer to *caller-defined* structure of the fol‐
lowing general form:
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[1]; /* message data */
};
Nici un header sistem nu defineste structura asta pentru a nu obliga
programatorii care o vor folosi să recurgă la trucuri speciale ca
malloc(sizeof(struct msgbuf) + aditional_payload) sau char mtext[0].
Singurul lucru care e cerut e ca structura să aibă minimum 4 bytes, și
dacă se interpretează acești 4B ca un «signed long int» valoarea
rezultată trebuie să fie > 0 (pentru că msgrcv cu tipul <= 0 are o
semnificație aparte).
Kernelul cere să știe dimensiunea payloadului adițional (care poate fi
zero: «The mtext field is an array (or other structure) whose size
is specified by msgsz, a non-negative integer value.»). Problema cu
abordarea asta e că se pierde "type checking"-ul pe care l-ar fi putut
impune un compilator C.
>
> Pentru a intelege mai bine campul mtext cititi threadul [1] din lista de
> PSO.
>
> [1] http://cursuri.cs.pub.ro/pipermail/pso/2008-April/002288.html
Anyways, +1
--
Lucian
More information about the so
mailing list