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 &lt;<a href="mailto:lucian.grijincu@gmail.com">lucian.grijincu@gmail.com</a>&gt;:<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 &lt;<a href="mailto:daniel.baluta@gmail.com">daniel.baluta@gmail.com</a>&gt;:<br>

<div class="Ih2E3d">&gt; Salut,<br>
&gt;<br>
&gt; In laboratorul de IPC2 aveam definita structura<br>
&gt;<br>
&gt; &nbsp;typedef struct msgbuf<br>
&gt; &nbsp;{<br>
&gt; &nbsp; &nbsp; &nbsp;long type;<br>
&gt; &nbsp; &nbsp; &nbsp;char mtext[0];<br>
&gt; &nbsp;} msgbuf_t;<br>
&gt;<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>
 &nbsp; &nbsp; &nbsp; The msgp argument is a pointer to *caller-defined* structure of the &nbsp;fol‐<br>
 &nbsp; &nbsp; &nbsp; lowing general form:<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;struct msgbuf {<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;long mtype; &nbsp; &nbsp; &nbsp; /* message type, must be &gt; 0 */<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char mtext[1]; &nbsp; &nbsp;/* message data */<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<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 &gt; 0 (pentru că msgrcv cu tipul &lt;= 0 are o<br>
semnificație aparte).<br>
<br>
Kernelul cere să știe dimensiunea payloadului adițional (care poate fi<br>
zero: «The &nbsp;mtext &nbsp;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 &quot;type checking&quot;-ul pe care l-ar fi putut<br>
impune un compilator C.<br>
<div class="Ih2E3d"><br>
&gt;<br>
&gt; Pentru a intelege mai bine &nbsp;campul mtext cititi threadul [1] din lista de<br>
&gt; PSO.<br>
&gt;<br>
&gt; [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>