2012-10-23 14 views
6

La funzione mkfifo accetta 2 argomenti, percorso e modalità. Ma non so quale sia il formato del percorso che utilizza. Sto scrivendo un piccolo programma per creare una named pipe e come path nello mkfifo. Ad esempio, utilizzando /home/username/Documents, ma restituisce sempre -1 con il messaggio Error creating the named pipe.: File exists.mkfifo() error ---> "Errore durante la creazione della named pipe: File esistente"

Ho controllato questo dir un sacco di volte e non c'è pipa al suo interno. Quindi mi chiedo quale sia il problema. La modalità che uso in mkfifo è 0666 o 0777.

+0

è possibile aggiungere la funzione esatta chiamata? – tomahh

+0

Errr, ti sei dimenticato di dare un nome al nome della pipa? Il percorso è directory + '/' + nome file, quindi '/ home/username/Documents/mypipe'. –

+0

char * myfifo = "/ home/nomeutente/Documenti"; mkfifo (myfifo, 0777); – SpyrosR

risposta

5

Hai dato mkfifo() il nome di una directory esistente, quindi l'errore. È necessario dare il nome di un file inesistente:

mkfifo("/home/username/Documents/myfifo", 0600); 
+0

Grazie! Ho capito che :) – SpyrosR

2

L'argomento 'percorso' per mkfifo() deve specificare un percorso completo, la directory e il nome del file che è.

Così, sarebbe:

char *myfifo="/home/username/Documents/mypipe"; 

mkfifo(myfifo, 0777); 

Come nota a margine, si dovrebbe evitare l'uso di bit dei permessi ottale e uso di nome costanti invece (da sys/stat.h), quindi:

mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO); 
+0

Cosa c'è che non va con i permessi ottali? Sono estremamente standard e universali. – wallyk

+0

Grazie Michal !;) – SpyrosR

+1

E anche i permessi ottali sono un po 'più concisi! Comunque, in teoria, dovresti usare i nomi S_Iwxyz. In pratica, starai bene quasi ovunque usando l'ottale. –

0

Usa remove() rimuovere il file alla fine del programma o all'inizio del programma, per assicurarsi che non esista quando lo si crea.