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
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 :aie:
Code:
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:
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 );
} |