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
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
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:
Je crée un tube nommé et je voudrais écrire l'ensemble des données depuis le serveur.
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" }
Puis côté client je veux lire (et afficher les données)
J'espère avoir été plus clair!
Merci
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
À un soucis d'endianness près, l'idée est bonne (je n'ai pas testé le code par contre).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager