Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1660 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Tube nommé sous unix

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tube nommé sous unix

n°1476763
hostile4
Posté le 16-11-2006 à 18:46:50  profilanswer
 

Bonjour,
 
J'ai un petit soucis en ce qui concerne les tubes nommés, je n'arrive pas à récupérer les valeurs entiéres que j'envoi.
 
En gros je voudrais qu'un serveur réceptionne des valeur int provenant de client , qu'il les additionne entre elles et les envois à son tour au différents clients.
 
Mais impossible de récupéré les valeurs en int  :(  
 
Je ne récupére qu'une suite de chiffre incompréhensible ...
 
Si quelqu'un pourrais m'expliqué la démarche pour écrire et recevoir des valeurs int dans un tube nommé merci d'avance !!

mood
Publicité
Posté le 16-11-2006 à 18:46:50  profilanswer
 

n°1476776
matafan
Posté le 16-11-2006 à 19:06:27  profilanswer
 

Tu peux nous monter un petit bout de code peut-etre ?

n°1477553
Sve@r
Posté le 17-11-2006 à 17:26:08  profilanswer
 

hostile4 a écrit :

En gros je voudrais qu'un serveur réceptionne des valeur int provenant de client , qu'il les additionne entre elles et les envois à son tour au différents clients.


On utilise plus généralement des sockets pour faire ce genre de manip... mais ça marche aussi via tubes nommé.
 

hostile4 a écrit :

Si quelqu'un pouvais m'expliquer la démarche pour écrire et recevoir des valeurs int dans un tube nommé merci d'avance !!


C'est la même démarche que pour écrire et recevoir des valeurs int dans un fichier ordinaire

FILE *fp;
int i=10;
int nb_elem;
 
// Ecrire dans le tube
fp=fopen("tube", "w" );
if (fp == NULL) => erreur d'ouverture
nb_elem=fwrite(&i, sizeof(int), 1, fp);
if (nb_elem != 1) => erreur d'écriture
fclose(fp);
 
// Lire le tube
fp=fopen("tube", "r" );
if (fp == NULL) => erreur d'ouverture
nb_elem=fread(&i, sizeof(int), 1, fp);
if (nb_elem == -1) => erreur de lecture
fclose(fp);


 
La seule différence avec un fichier ordinaire, c'est qu'il te faudra impérativement avoir en parallèle 2 processus
- un processus qui lit
- un processus qui écrit
S'il n'y en a qu'un seul de lancé sur les deux, il sera bloqué dans sa phase lecture (ou écriture) tant que son homologue n'aura pas été lancé.

Message cité 1 fois
Message édité par Sve@r le 17-11-2006 à 17:29:05

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1477664
bb138
La vie est belle ...
Posté le 17-11-2006 à 22:25:02  profilanswer
 

Juste au passage... Il doit bien exister un système de buffer ou c'est vraiment de la consommation au fur et à mesure ?
(je n'y connais rien et il est un peu tard pour moi pour voir ce soir...)

n°1477703
matafan
Posté le 18-11-2006 à 06:30:17  profilanswer
 

Un pipe, c'est un buffer, en quelque sorte.

n°1477744
hostile4
Posté le 18-11-2006 à 13:13:13  profilanswer
 

Sve@r a écrit :

On utilise plus généralement des sockets pour faire ce genre de manip... mais ça marche aussi via tubes nommé.
 
 
C'est la même démarche que pour écrire et recevoir des valeurs int dans un fichier ordinaire

FILE *fp;
int i=10;
int nb_elem;
 
// Ecrire dans le tube
fp=fopen("tube", "w" );
if (fp == NULL) => erreur d'ouverture
nb_elem=fwrite(&i, sizeof(int), 1, fp);
if (nb_elem != 1) => erreur d'écriture
fclose(fp);
 
// Lire le tube
fp=fopen("tube", "r" );
if (fp == NULL) => erreur d'ouverture
nb_elem=fread(&i, sizeof(int), 1, fp);
if (nb_elem == -1) => erreur de lecture
fclose(fp);


 
La seule différence avec un fichier ordinaire, c'est qu'il te faudra impérativement avoir en parallèle 2 processus
- un processus qui lit
- un processus qui écrit
S'il n'y en a qu'un seul de lancé sur les deux, il sera bloqué dans sa phase lecture (ou écriture) tant que son homologue n'aura pas été lancé.


 
 
Merci pour ton aide !!
Bien que je pensais au tube nommé (fifo , crée par mkfifo) , là j'ai compris le principe.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Tube nommé sous unix

 

Sujets relatifs
[Perl] script utilisant les pipe unix, sql, et p'tet fork[SCRIPT UNIX]Pb avec sed
Code retour Java sous Unixeffacer une valeur dans une collection de fichiers unix
passer passord à su dans script unixAdapter un code généré sous Dev C++ vers du Solaris 5.8 (Unix)
Interactions avec les "echo" sur terminal UNIX+JAVACommunication haut niveau Unix/Windows
Command shell Windows a la Linux/Unix?UNIX: Crontab
Plus de sujets relatifs à : Tube nommé sous unix


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR