Aller au contenu

c : connaitre le type d'une structure


toon

Messages recommandés

bonjour, j ai un projet à réaliser en c sur minix.

j'aimerais bien savoir comment connaitre le type d'une structure.

(un peu comme la methode instanceOf de java).

voila la partie du code que je pense utilile :

00013 typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3;} mess_1;
00014 typedef struct {int m2i1, m2i2, m2i3; long m2l1, m2l2; char *m2p1;} mess_2;
00015 typedef struct {int m3i1, m3i2; char *m3p1; char m3ca1[M3_STRING];} mess_3;
00016 typedef struct {long m4l1, m4l2, m4l3, m4l4, m4l5;} mess_4;
00017 typedef struct {short m5c1, m5c2; int m5i1, m5i2; long m5l1, m5l2, m5l3;}mess_5;
00018 typedef struct {int m7i1, m7i2, m7i3, m7i4; char *m7p1, *m7p2;} mess_7;
00019 typedef struct {int m8i1, m8i2; char *m8p1, *m8p2, *m8p3, *m8p4;} mess_8;
00020 
00021 typedef struct {
00022   int m_source;				 /* who sent the message */
00023   int m_type;				   /* what kind of message is it */
00024   union {
00025		 mess_1 m_m1;
00026		 mess_2 m_m2;
00027		 mess_3 m_m3;
00028		 mess_4 m_m4;
00029		 mess_5 m_m5;
00030		 mess_7 m_m7;
00031		 mess_8 m_m8;
00032   } m_u;
00033 } message;

ce que j'aimerais bien savoir si il s'agit d'un message de type 1 ou 2 .... a partir d'une variable message

merci

Lien vers le commentaire
Partager sur d’autres sites

yep, à ma connaissance, c'est le seul moyen de faire de l'introspection en C pur : encapsuler tes données dans une structure qui contient le type et une union de tout les types possibles. C'est lourdingue à souhait.

Remarque, tu pourrais aussi jouer aux devinette en tatant du sizeof, cependant si jamais tu as deux structures avec la même taille, c'est foutu...

Lien vers le commentaire
Partager sur d’autres sites

la donnée m_type ne contient pas le type de message propremment dit. C'est des raccourcis pour dire si est un message est pour le reseau, ....

un peu compliqué à chercher le type propre pour chaque raccourci. du mien c'est ce que j'ai compris

merci qd meme

Lien vers le commentaire
Partager sur d’autres sites

Effectivement un sizeof n'aidera pas, car il prend la taille du type le plus grand.

D'après la doc ci-dessus, je ne vois pas non plus comment faire pour récupérer le type (si m_type ne donne pas un identifiant de type). Cependant d'après le peu que j'ai lu, si j'ai bien compris, les fonctions qui utilise cette structure connaissent le type de message non ?

Say a system-call handler do_managecap needs to receive three integer parameters. The

system-call number of do_managecap is 58. We need to initialize the three parameters in

the message structure, and call the system call handler using the message structure as

shown in figure 7.

message m;
m.m1_i1=45;
m.m1_i2=55;
m.m1_i3=65;
_syscall(FS,58,&m);

Figure 7: Passing Parameter Using the Message Structure

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...