2010-11-29 6 views
0
#include <unistd.h> 
#include<stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <stdlib.h> 
#include <string.h> 
#include <pthread.h> 

int main (int argc, char * argv[]) 
{ 
    int enteroParaElPipe; 
    int IDPROGRAMACLIENTE=getpid(); 
    printf("%d",IDPROGRAMACLIENTE); 

    if((mkfifo("pipe",0666))==-1) 
    { 
     perror("error creating pipe, type 1"); 
     exit(1); 
    } 

    if((enteroParaElPipe=open("pipe",O_WRONLY))==-1) 
    { 
     perror("error creating pipe, type 2"); 
     exit(1); 
    } 

    char comando[200]; 

    if(scanf("%199s", comando) == 1) 
     puts(comando); 

    int written; 
    escritos=write(enteroParaElPipe,"HOLA\n",5); 
    printf("Written: %d\n",written); 
    close(enteroParaElPipe); 

    return 0; 
} 

Lorsque vous essayez d'exécuter ce code, je reçois:Quel est le problème avec ce tuyau?

error creating pipe: Invalid argument 

Pourquoi?

(modifications sur la base des premières réponses ajoutées)

+0

Pourquoi vous passer un pid 'mkfifo'? Vous devriez également utiliser différents messages pour les différents cas d'erreur afin que vous puissiez savoir lequel est arrivé. –

+0

votre formatage de code était horrible. Je l'ai amélioré un peu, et c'est toujours moche. Vous voulez que les gens passent par votre code? le moins que vous puissiez faire est de le formater. – abelenky

+0

@abelenky: ouais, désolé. J'ai sorti les parties non formées et non pertinentes. – andandandand

Répondre

1

Le deuxième argument à mkfifo est un mode_t représentant les autorisations sur le FIFO.

Essayez: mkfifo("pipe", 0666);

2

Pourquoi vous passer getpid() comme 2ème argument en faveur mkfifo?

Le 2ème argument est le mode, comme dans, les autorisations du fichier FIFO. Tapez man 3 mkfifo pour plus d'informations!

Cheers.

+0

@omgzor: '0600' est probablement ce que vous voulez passer comme deuxième argument. – caf

+0

J'ai essayé avec les deux 0600 et 0666 et a obtenu la même erreur – andandandand

+0

La même chose? Argument invalide? Uhm, ... avez-vous des permissions sur ce répertoire? Parlons-nous d'un système de fichiers qui supporte les FIFO? (Par exemple, un système FAT32 ne le ferait pas). – slezica