2011-11-08 5 views
0

enter image description hereProgramme serveur FIFO

Le programme ci-dessus j'ai tapé linux. Il doit essentiellement connecter un client et un serveur dans des terminaux séparés. Mais quand je les exécuter dans l'ordre, i.e.

  1. serveur Compile -> serveur exécuter
  2. Compile client -> exécuter client

Les bornes juste ne rien faire. Il n'imprime même pas la partie "Trying to connect" de la première instruction printf. Quelle est l'erreur ici?

EDIT

I pour vérifier la valeur de retour de mkfifo comme @parapura rajkumar dit. Mais encore, il reste le même. Voici mon code modifié pour le serveur.

if(mkfifo("fifo1",0666)<0) { 
    printf("Error"); 
} 
if(mkfifo("fifo2",0666)<0) { 
    printf("Error"); 
} 
fflush(stdout); 
+0

À moins que vous allez imprimer plus sur une ligne en utilisant plusieurs appels 'printf', il est conseillé de mettre fin à la' printf' avec une nouvelle ligne ('\ n ') car cela va vider la sortie de sorte qu'il est montré dans la console. Alors vous n'avez pas besoin de 'fflush'. –

Répondre

2

Vous avez créé un blocage. Serveur wait open ("fifo1", O_RDONLY) et client wait open ("fifo2", O_RDONLY).

Modifier client.c:

int writefd = open("fifo1",O_WRONLY); 
int readfd = open("fifo2",O_RDONLY); 
+0

Pour être plus explicite, l'ouverture d'un fifo se bloque normalement jusqu'à ce que quelqu'un d'autre l'ouvre aussi afin qu'ils puissent être connectés. (Au moins, par défaut, il peut être ouvert en mode non bloquant, bien que cela rende les choses plus compliquées.) – wnoise