다음 위로 이전 목차 리눅스 프로그래머를 위한 가이드

6.3.2 FIFO 만들기 (Creating a FIFO)

이름을 가진 파이프(named pipe)를 방법에는 몇가지가 있다. 처음 두가지는 쉘로 부터 직접 만드는 것이다.
	mknod MYFIFO p
	mkfifo a=rw MYFIFO
위의 두 명령어는 한기지 예외를 제외하고 동일한 동작을 수행한다. mkfifo 명령어는 파이프를 만든 후 FIFO 파일에 대해 직접 허가사항(permission)을 바꾸기 위한 항목을 제공한다. mknod의 경우는 chmod 명령어의 빠른 호출이 필요할 것이다.

FIFO 파일은 긴 디렉토리 리스트(long directory listing)에서 보여지는 "p" 지시자에 의해 물리적인 파일 시스템에 재빨리 알려진다.

        $ ls -l MYFIFO
        prw-r--r--   1 root     root            0 Dec 14 22:15 MYFIFO|
파일명 다음에 있는 수직선("pipe sign")에 주목하라.

C로 FIFO를 만들기 위해, mknod() 시스템 호출을 사용할 수 있다.:


  LIBRARY FUNCTION: mknod();                                                    

  PROTOTYPE: int mknod( char *pathname, mode_t mode, dev_t dev);                
    RETURNS: 0 on success,                                                      
             -1 on error: errno = EFAULT (pathname invalid)                     
                                  EACCES (permission denied)                    
                                  ENAMETOOLONG (pathname too long)              
                                  ENOENT (invalid pathname)                     
                                  ENOTDIR (invalid pathname)                    
                                  (see man page for mknod for others)           

  NOTES: Creates a filesystem node (file, device file, or FIFO)

man 페이지에 mknod()에 대한 보다 자세한 내용을 남길테지만, C로 만들어진 FIFO의 간단한 예를 살펴보자.:
                mknod("/tmp/MYFIFO", S_IFIFO|0666, 0);
이 경우, "/tmp/MYFIFO" 파일은 FIFO 파일처럼 만들어 진다. 다음처럼 지정된 umask에 의해 영향을 받는다 하더라도 요청된 허가사항(permission)은 "0666"이다.:
                final_umask = requested_permissions & ~original_umask
일반적인 방법은 일시적으로 umask 값을 공격하기 위해 umask() 시스템 호출을 사용하는 것이다.:
                umask(0);
                mknod("/tmp/MYFIFO", S_IFIFO|0666, 0);
게다가, 디바이스 파일을 만들고 있지 않다면 mknod()의 세번째 아규먼트는 무시된다. 이런 경우에는 디바이스 파일의 큰쪽과 작은 쪽의 번호를 지정해 주어야만 한다.


이전:6.3.1 기본 개념 다음:6.3.3 FIFO 동작

Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved

Email To:Webmaster , Another address
LAST UPDATE Nov 15,1997
Created Nov 15,1997