2015-11-08 7 views
1

J'ai créé fifo, essayez d'écrire: echo "text" > myfifo et lisez-le avec mon programme. Mais quand j'écris au fifo rien ne se voit.Programmation sous Linux - FIFO

J'ai essayé beaucoup d'options, en éteignant et en mode NON_BLOCK et ainsi de suite mais rien ne semble aider.

#include <ctype.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <fcntl.h> 

int main (int argc, char **argv) 
{ 

int c; 

int tab[argc/2];//decriptors 
int i=0; 
while ((c = getopt (argc, argv, "f:")) != -1) { 
    switch (c) { 
     case 'f': 
      if (tab[i] = open(optarg, O_RDONLY| O_NONBLOCK) == -1) { 
       perror(optarg); 
       abort(); 
      } 
      //dup(tab[i]); 
      //printf(":::::%d==== %s\n",555,optarg); 
      i++; 
      break; 

     default: 
      abort(); 
    } 
} 
printf("----------------------\n"); 

char cTab[10]; 
int charsRead; 
for(int j=0;j<=i;j++) 
{ 
    charsRead = read(tab[j], cTab, 10); 

    printf(" ==%d+++%s\n",tab[j],cTab); 
    //write(tab[j],cTab,10); 
} 
for(int j=0;j<i;j++) 

{ 
    close(tab[j]); 
} 
+2

Vous avez utilisé la balise 'C++', mais cela semble être du code C droit. –

+0

Ca ne marche pas de toute façon ... – Knight

+1

Que faites-vous exactement? Ce qui se produit? Qu'espériez-vous arriver à la place? – melpomene

Répondre

0

Ce

 if (tab[i] = open(optarg, O_RDONLY| O_NONBLOCK) == -1) { 

doit être

 if ((tab[i] = open(optarg, O_RDONLY)) == -1) { 

(il n'y a probablement pas besoin pour le drapeau O_NONBLOCK, mais votre erreur la plus grave est que vous assigne un résultat booléen (0 ou 1, pas le descripteur de fichier) à tab[i])

Dernier point mais non des moindres, pour

printf(" ==%d+++%s\n",tab[j],cTab); 

à travailler, vous avez besoin de mettre un caractère nul après le dernier caractère que vous lisez:

if(charsRead >= 0) 
     cTab[charsRead] = 0; 

(vous devez également vous assurer qu'il ya toujours de la place pour le nul final: soit demander 9 caractères ou allouer 11 pour le tableau).

+0

Merci beaucoup, fonctionne comme un charme :) – Knight