Il y a très longtemps que je n'ai pas fait de C, mais ça doit être quelque chose comme çà:
mystruct m;
mystruct m_ptr = &m;
send(fd, (void *)m_ptr, sizeof(m), 0);
Mais attention. Si ton client et ton serveur doivent fonctionner sur la même plateforme (même compilateurs, mêmes OS, mêmes architectures), ça doit passer (encore que ...). Sinon, tu peux avoir les problèmes suivants :
1° octets de bourrage dans la structure. Les compilateurs peuvent placer des octets supplémentaires dans la structure, de manière non normalisée.
Par exemple sur beaucoup d'architectures, les champs sont alignés au mot, donc si tu as un char et un long int comme champs, ta structure fera 8 octets :
* le char
* trois octets de remplissage
* les quatre octets du long.
Il y a des directives de preprocessing pour régler ce comportement.
2° attention aux représentations des int. Selon les architectures, l'octet de poids fort et codé au début ou à la fin. Par exemple c'est différent sur Intel et sur PowerPC.
Pour un comportement "propre", il faut avoir recours à des techniques un peu plus sophistiquées comme XDR ou beaucoup plus sophistiquées comme ASN.1.
# Il faut caster le pointeur sur la structure, mais attention ...
Posté par tontonflingueur . En réponse au message caster en une structure. Évalué à 5.
Mais attention. Si ton client et ton serveur doivent fonctionner sur la même plateforme (même compilateurs, mêmes OS, mêmes architectures), ça doit passer (encore que ...). Sinon, tu peux avoir les problèmes suivants :
1° octets de bourrage dans la structure. Les compilateurs peuvent placer des octets supplémentaires dans la structure, de manière non normalisée.
Par exemple sur beaucoup d'architectures, les champs sont alignés au mot, donc si tu as un char et un long int comme champs, ta structure fera 8 octets :
* le char
* trois octets de remplissage
* les quatre octets du long.
Il y a des directives de preprocessing pour régler ce comportement.
2° attention aux représentations des int. Selon les architectures, l'octet de poids fort et codé au début ou à la fin. Par exemple c'est différent sur Intel et sur PowerPC.
Pour un comportement "propre", il faut avoir recours à des techniques un peu plus sophistiquées comme XDR ou beaucoup plus sophistiquées comme ASN.1.