am zis in laborator :D , de fapt in exercitiile din laborator libs/lin/messageQueue.c<br><br><div class="gmail_quote">2008/4/12 Lucian Adrian Grijincu <<a href="mailto:lucian.grijincu@gmail.com">lucian.grijincu@gmail.com</a>>:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">2008/4/12 Daniel Baluta <<a href="mailto:daniel.baluta@gmail.com">daniel.baluta@gmail.com</a>>:<br>
<div class="Ih2E3d">> Salut,<br>
><br>
> In laboratorul de IPC2 aveam definita structura<br>
><br>
> typedef struct msgbuf<br>
> {<br>
> long type;<br>
> char mtext[0];<br>
> } msgbuf_t;<br>
><br>
<br>
</div>Scuze, unde era definită structura asta?<br>
<br>
Standardele care definesc modul de functionare a msgsnd, msgrcv (SVr4,<br>
POSIX.1-2001) spun în mod explicit:<br>
<br>
The msgp argument is a pointer to *caller-defined* structure of the fol‐<br>
lowing general form:<br>
<br>
struct msgbuf {<br>
long mtype; /* message type, must be > 0 */<br>
char mtext[1]; /* message data */<br>
};<br>
<br>
Nici un header sistem nu defineste structura asta pentru a nu obliga<br>
programatorii care o vor folosi să recurgă la trucuri speciale ca<br>
malloc(sizeof(struct msgbuf) + aditional_payload) sau char mtext[0].<br>
<br>
Singurul lucru care e cerut e ca structura să aibă minimum 4 bytes, și<br>
dacă se interpretează acești 4B ca un «signed long int» valoarea<br>
rezultată trebuie să fie > 0 (pentru că msgrcv cu tipul <= 0 are o<br>
semnificație aparte).<br>
<br>
Kernelul cere să știe dimensiunea payloadului adițional (care poate fi<br>
zero: «The mtext field is an array (or other structure) whose size<br>
is specified by msgsz, a non-negative integer value.»). Problema cu<br>
abordarea asta e că se pierde "type checking"-ul pe care l-ar fi putut<br>
impune un compilator C.<br>
<div class="Ih2E3d"><br>
><br>
> Pentru a intelege mai bine campul mtext cititi threadul [1] din lista de<br>
> PSO.<br>
><br>
> [1] <a href="http://cursuri.cs.pub.ro/pipermail/pso/2008-April/002288.html" target="_blank">http://cursuri.cs.pub.ro/pipermail/pso/2008-April/002288.html</a><br>
<br>
</div>Anyways, +1<br>
<font color="#888888"><br>
--<br>
Lucian<br>
_______________________________________________<br>
so mailing list<br>
<a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>
<a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>
</font></blockquote></div><br>