2012-10-23 9 views
6

mkfifo 함수는 경로와 모드라는 두 개의 인수를 사용합니다. 그러나 나는 그것이 사용하는 경로의 형식이 무엇인지 모른다. 나는 명명 된 파이프를 만들고 작은 경로를 mkfifo에 쓰려고한다. 예를 들어, /home/username/Documents을 사용하지만 항상 메시지를 Error creating the named pipe.: File exists과 함께 -1을 반환합니다.mkfifo() error ---> "명명 된 파이프를 만드는 중 오류가 발생했습니다 : 파일이 있습니다"

나는이 dir을 여러 번 확인했으며 그 안에 파이프가 없습니다. 그래서 나는 그 문제가 무엇인지 궁금합니다. mkfifo에서 사용하는 모드는 0666 또는 0777입니다.

+0

정확한 함수 호출을 추가 할 수 있습니까? – tomahh

+0

Errr, 명명 된 파이프에 이름을 지정하는 것을 잊었습니까? 경로는 디렉토리 +'/'+ 파일 이름이므로'/ home/username/Documents/mypipe'입니다. –

+0

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

답변

5

mkfifo()에 기존 디렉토리의 이름을 지정 했으므로 오류가 발생합니다. 당신은 존재하지 않는 파일의 그것에게 이름을 부여해야합니다

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

고마워요. 그냥 이해 했어요. :) – SpyrosR

2

mkfifo()에 '경로'인수는 전체 경로, 디렉토리이며 파일 이름을 지정할 수 있습니다.

따라서

, 그것은 다음과 같습니다 보조 노트로

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

mkfifo(myfifo, 0777); 

, 당신은해야한다, 그래서 (sys/stat.h에서) 대신 진수 권한 비트 및 사용이라는 상수를 사용하지 마십시오 :

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

8 진수 권한에 문제가 있습니까? 그들은 매우 표준적이고 보편적입니다. – wallyk

+0

감사합니다 Michal !;) – SpyrosR

+1

그리고 8 진 허가는 전체 힙이 더 간결합니다! 그러나 이론 상으로는 S_Iwxyz 이름을 사용해야합니다. 실제로는 8 진수를 사용하여 거의 모든 곳에서 괜찮을 것입니다. –

0

사용 remove()을 프로그램이 끝날 때나 프로그램 시작시 파일을 제거하여 다음에 파일을 만들 때 파일이 존재하지 않는지 확인하십시오.