2012-10-23 22 views
6

mkfifo işlevi 2 argüman, yol ve mod alır. Ama kullandığı yolun formatının ne olduğunu bilmiyorum. Adlandırılmış bir boru oluşturmak için mkfifo yolunda küçük bir program yazıyorum. Örneğin, /home/username/Documents'u kullanarak, Error creating the named pipe.: File exists iletisiyle her zaman -1 değerini döndürür.mkfifo() error ---> "Adlandırılmış boru oluşturulurken hata oluştu. Dosya var"

Bu direyi çok kez kontrol ettim ve içinde hiç boru yok. Bu yüzden sorunun ne olduğunu merak ediyorum. Mkfifo'da kullandığım mod ya 0666 veya 0777'dir.

+0

Tam işlev çağrısını ekleyebilir misiniz? – tomahh

+0

Errr, adlandırılmış boruyu bir isim vermeyi unuttun mu? Yol dizini + '/' + dosya adıdır, bu yüzden/home/username/Documents/mypipe'. –

+0

char * myfifo = "/ home/username/Documents"; mkfifo (myfifo, 0777); – SpyrosR

cevap

5

mkfifo() varolan bir dizinin adını verdi, böylece hata. Sen Var olmayan bir dosyanın o isim vermek gerekir:

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

Teşekkür ederim! Sadece bunu anladım. :) – SpyrosR

2

mkfifo() için 'yol' argümanı tam yol, dizin ve bir dosya adı belirtmek zorundadır.

Böylece

, öyle olurdu: Bir yan not olarak

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

mkfifo(myfifo, 0777); 

, sen bu yüzden, (sys/stat.h itibaren) yerine sekizlik izin bitleri ve kullanım adlandırılmış sabitleri kullanmaktan kaçının:

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

Sekizlik izinler ile ilgili sorun nedir? Son derece standart ve evrenseldirler. – wallyk

+0

Teşekkürler Michal !;) – SpyrosR

+1

Ve sekizlik izinler de bir bütün yığın daha özlü! Ancak, teoride S_Iwxyz isimlerini kullanmanız gerekir. Pratikte, hemen hemen her yerde sekizlik kullanacaksınız. –

0

kullanın remove() Programın sonunda veya programın başında, bir sonraki oluşturulduğunda mevcut olmadığından emin olmak için dosyayı kaldırın.

İlgili konular