Bonjour,
J'essaie d'écrire un int dans un pipe en utilisant la fonction "write" sauf que l'argument qui est accepté est un const void *... Pourtant, cela fonctionne quand je lui passe un tableau de int...
Quelqu'un a une idée ?
Merci!
Version imprimable
Bonjour,
J'essaie d'écrire un int dans un pipe en utilisant la fonction "write" sauf que l'argument qui est accepté est un const void *... Pourtant, cela fonctionne quand je lui passe un tableau de int...
Quelqu'un a une idée ?
Merci!
En fait ce que je veux c'est écrire la taille de mon tableau à l'aide du write dans mon tampon ainsi que les données de mon tableaux de int. Passer mon tableau n'a pas été un problème. Par contre, passer la taille de mon tableau qui est bien entendu un int a été un problème. Donc pour résoudre ce problème, il faudrait que je passe par exemple &taille où taille est un int à un pointeur(ex. ptTaille) et ensuite utiliser ce pointeur dans ma fonction...
En te lisant, j'ai l'impression que t'as
- un tableau de int style int tab[]={1, 2, 3, 4, 5};
- une variable qui contient le nb de int de ton tableau style int nb=5;
Et donc tu voudrais transmettre, via un pipe,
- le tableau de int à ton tampon
- la taille de ce tableau afin que ton client sache combien il doit lire de int à partir de ce tableau
Ben la soluce est simple
1) tu écris dans le pipe ton nb en sachant que write veut une adresse donc tu lui passes l'adresse de ce nb
2) tu écris ton tableau de la même façonCode:write(&nb, sizeof(int), pipe)
ou bienCode:write(tab, nb * sizeof(*tab), pipe)
Tu passes une adresse à chaque cas qui est récupérée du coté du write dans un pointeur universel donc de type void *Code:write(&tab[0], nb * sizeof(*tab), pipe)
De l'autre coté tu commences par récupérer le nb d'éléments ce qui te donne ensuite le nb d'octets à lire dans le pipe et t'as ton tableau.
Maintenant, il existe une autre solution plus "propre" d'un point de vue évolutif. Etant donné que le nb est associé au tableau, rien ne t'empêche de grouper les deux éléments dans une structure car c'est le but des structures => grouper de façon organisationnelle les éléments qui vont ensemble.
Une fois que ta structure est créée, tu l'envoies direct dans le pipe. De l'autre coté, tu récupères la même structure ce qui te donne à la fois le tableau et son nb d'éléments.
Code:
1
2
3
4
5
6
7
8
9 typedef struct { int nb; int tab[1024]; } t_objet; t_objet monObjet; ...remplissage de monObjet.nb et monObjet.tab[x]... write(&monObjet, sizeof(monObjet), pipe);
essaie la convertion avec sprintf
sprintf(chain_a_envoyer, "%d",ton-entier);
et apres tu fais write(des[1],&chain_a_envoyer,2);