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

C Discussion :

[IPC] mkfifo et reader


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut [IPC] mkfifo et reader
    Bonjour,
    Je suis en train de tester un peu le mkfifo et je me heurte à certains détails.
    Voici mon code :

    Code : 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
     
     
    int main(int argc, char *argv[]) {
     
      char buf[650];
      FILE* fifo = NULL;
     
      fifo = fopen ("/tmp/pipe_sample", "r");
     
      if (fifo < 0) 
       {
            perror("Opening read pipe");
            exit(1);
        }
     
      while (1)
      {
     	sleep (2);
    	if (fread(buf, sizeof(char), 1, fifo) <0) 
            {
                perror("Read the pipe");
                exit(2);
            }
     
            printf("%c", buf[0]);
        }
     
      fclose (fifo);
      return 1;
    }
    J'ouvre mon pipe dans mon shell avec les bonnes permissions.
    J'ouvre une autre fenêtre et je tape ceci :
    cat > /tmp/pipe_sample
    Ensuite, je tape des trucs et la fenêtre de mon reader me lit les bonnes choses.
    Tout va bien.

    Sauf que quand je tape une chaîne trop longue, le reader ne veut pas me l'afficher... Une idée?

    Le but est de voir si un reader lent ou un writer lent peut influencer mon programme et si j'ai un réel intérêt à changer mes accès fichiers.
    Vous auriez d'autres idées de test?

    Merci
    Vincent

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 313
    Billets dans le blog
    5
    Par défaut
    À priori je dirai que le problème vient de la taille de buf[];. Si tu dépasses sa taille l'inscription se fait un peu n'importe où.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut
    Je ne lis qu'un char à chaque fois.

    Tu penses qu'il peut y avoir un problème?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 313
    Billets dans le blog
    5
    Par défaut
    Oups, au temps pour moi ! J'ai regardé ton code un peu trop en diagonal.

  5. #5
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salut,

    je ne sais pas si c'est lié, mais lorsqu'on crée un fifo en c avec mkfifo il faut ensuite l'ouvrir en read et en write. Tu ne l'ouvre qu'en read ... essaye en mode rw.

    ref : man 3 mkfifo :
    Once you have created a FIFO special file in this way, any process can open it for reading or writing, in the same way as an ordinary file. However, it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it. Opening a FIFO for reading normally blocks until some other process opens the same FIFO for writing, and vice versa.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut
    Bonjour, je ne comprends pas bien la logique mais cela semble marcher

    Merci !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. postgresql et acrobat reader
    Par sunshine2004 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 21/05/2005, 10h28
  2. [Delphi 6 personnel] Détecter Adobe Reader
    Par balu dans le forum Débuter
    Réponses: 3
    Dernier message: 01/03/2005, 16h10
  3. Accélérer l'ouverture d'acrobat reader 6
    Par petitours dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 20/12/2004, 13h53
  4. Réponses: 12
    Dernier message: 08/06/2004, 08h39
  5. [langage] mkfifo en PERL ?
    Par Gogoye dans le forum Langage
    Réponses: 12
    Dernier message: 21/01/2004, 19h44

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