IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Write dans un pipe


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Par défaut Write dans un pipe
    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!

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Geno312 Voir le message
    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!
    Le type "void *" représente le type "pointeur universel". Donc tu peux lui passer un tableau de int (car en fait tu lui passes l'adresse du premier élément donc un int *), un tableau de doubles, de shorts, ..., bref un pointeur sur ce que tu veux.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Par défaut
    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...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Geno312 Voir le message
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(&nb, sizeof(int), pipe)
    2) tu écris ton tableau de la même façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(tab, nb * sizeof(*tab), pipe)
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(&tab[0], 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 *

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éclairé Avatar de torNAdE
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 255
    Par défaut
    essaie la convertion avec sprintf


    sprintf(chain_a_envoyer, "%d",ton-entier);

    et apres tu fais write(des[1],&chain_a_envoyer,2);

Discussions similaires

  1. [Struts] <Bean:write> dans un <html:select>
    Par damde dans le forum Struts 1
    Réponses: 9
    Dernier message: 24/05/2006, 11h09
  2. [STRUTS] balise <bean:write> dans <html:link>
    Par adrien.nicolet dans le forum Struts 1
    Réponses: 8
    Dernier message: 25/10/2005, 08h56
  3. plusieurs document.write dans une meme page
    Par Loko dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/07/2005, 17h16
  4. [jsp] bean:write dans un appel js
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 18/10/2004, 15h15
  5. write() dans une socket.. unix
    Par slack dans le forum Réseau
    Réponses: 5
    Dernier message: 18/12/2002, 20h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo