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 :

utilisation des tubes nommés


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 53
    Points
    53
    Par défaut utilisation des tubes nommés
    Bonjour,

    Je voulais savoir si on peut avec les tubes nommés, envoyer autre chose qu'une chaine de caractères. Par exemple, est-il possible d'envoyer le contenu d'une structure?

    Merci pour vos réponses

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 536
    Points : 19 359
    Points
    19 359
    Par défaut
    Bonjour,

    Peut-on avoir un peu plus de contexte ? un ou deux exemples ?

    --
    moi, je voudrais jouer au ballon
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    C'est vrai j'ai été un peu vague là.
    En fait, j'ai un exercice à faire dans le cadre de mes études.
    Je dois simuler sur la même machine le comportement client/serveur.
    Le client doit afficher des données se trouvant sur le serveur. Ces données côté serveur sont "dans" une structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct structure {
        int var1;
        int var2;
        char *var3;
    } maStruct[] {
    1,2,"test"
    }
    Je crée un tube nommé et je voudrais écrire l'ensemble des données depuis le serveur.
    Puis côté client je veux lire (et afficher les données)

    J'espère avoir été plus clair!
    Merci

  4. #4
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut Utilisation des tubes nommés
    Bonjour
    Bien sûr tu peux envoyer autre chose que des caractères, il suffit de faire un cast de la donnée que tu veux écrire dans le tube et à l'arrivée tu fais l'opération inverse.
    Bien entendu l'avis des experts est la bienvenue sur le code sources que je poste ci-dessous et désolé de mon intervention tardive
    Cordialement

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    /***
    *       programme exemple 1
    *       qui crée un tube nommé
    *       & write une structure
    ***/
     
    /***
    * Langage C
    ***/
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /***
    *       Système
    ***/
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
     
    /***
    * structure
    ***/
    typedef struct{
    	int x;
    	int y;
    }ts_Add;
     
    /***
    *       Fonction Principale
    ***/
    int main( void ){
     
    	ts_Add *s_Add = malloc( sizeof( ts_Add ) );
    	s_Add->x = 10;
    	s_Add->y = 20;
     
    	int iTube 	= 0;										
    	mode_t mode = ( S_IRUSR| S_IWUSR );						
    	mkfifo( "uDirect", mode );								
     
    	iTube = open( "uDirect", O_WRONLY );					
    	if( iTube ){
     
    		write(iTube,( (char*)s_Add ), sizeof( ts_Add ) );	
    		close( iTube );										
    	}
    	else{
    		perror("Erreur Tube ");								
    		exit( 1 );
    	}
     
    	return ( 0 );
    }

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    /***
    *       programme exemple 2
    *       read le flux de donné
    *       du tube et affiche le 
    *       le résultat
    ***/
     
    /***
    * Langage C
    ***/
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /***
    *       Système
    ***/
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
     
    /***
    * structure
    ***/
    typedef struct{
    	int x;
    	int y;
    }ts_Add;
     
     
    /***
    *       Fonction Principale
    ***/
    int main( void ){
     
    	ts_Add *s_Add = malloc( sizeof( ts_Add ) );
    	char *pZn = malloc( sizeof( ts_Add*) );
    	int iTube = 0;
    	iTube = open( "uDirect", O_RDONLY );
    	if( iTube ){
     
    		read( iTube, pZn, sizeof( ts_Add ) );
    		s_Add = ( ts_Add *)pZn;
    		int ret = ( s_Add->x + s_Add->y );
    		printf( "%d + %d\t= %d\n",s_Add->x,s_Add->y, ret);
    		free( pZn );									
    		close( iTube );									
    	}
    	else{
    		perror("Erreur Tube ");	
    		exit( 1 );
    	}
     
    	return ( 0 );
    }
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 148
    Points : 28 113
    Points
    28 113
    Par défaut
    À un soucis d'endianness près, l'idée est bonne (je n'ai pas testé le code par contre).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2014, 10h22
  2. détecter des données dans un tube nommé
    Par d'Oursse dans le forum Windows
    Réponses: 0
    Dernier message: 30/04/2011, 00h26
  3. Réponses: 5
    Dernier message: 28/03/2011, 04h46
  4. Utilisation de tubes dans des fork
    Par je®ome dans le forum Linux
    Réponses: 4
    Dernier message: 31/05/2006, 22h50
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 17h01

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