Provided by:
manpages-ko_20050219-2_all 
#include <fcntl.h>
#include <unistd.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
장치 특수 파일 또는 named 파이프) 를 생성한다.
mode는 생성될 노드의 타입과 소유권을 명시한다.
이는 새로운 노드의 소유권과 아래 나영 파일 타입중 하나의 조합이
(비트연산 OR를 사용해 되어야한다.
소유권은 일반적으로 프로세스의 umask에 의해 수정된다: 생성된 노드의
소유권은 (mode & ~umask)이다.
일반 파일 (빈 상태로 만들어진다), 문자 특수 파일, 블럭 특수 파일 또는
FIFO (named 파이프)를 생성하기 위한 파일 타입은 각각 S_IFREG, S_IFCHR,
S_IFBLK 그리고 S_IFIFO 이고, 일반 파일을 생성하기 위해 0도 가능하다.
만약 파일 타입이 S_IFCHR 또는 S_IFBLK이면 dev는 새로 생성될 장치 특수
파일의 주(major), 부(minor)번호이어야만 한다; 그렇지 않으면, 무시된다.
새로 생성된 노드는 프로세스의 유효 사용자 ID가 소유권을 갖는다. 만약
노드가 위치한 디렉토리에 set-group-id 비트가 설정되어 있거나, 파일
시스템이 BSD 그룹 의미(semantic)에 따라 마운트되어 있다면, 새로운
노드는 자신의 부모 디렉토리로 부터 그룹 소유권을 상속받을 것이다;
그렇지 않으면 프로세스의 유효 그룹 ID가 그룹 소유권을 갖는다.
적절히 설정된다).
프로세스의 권한이 슈퍼유저(superuser)가 아니다; 또한 pathname이
포함된 파일시스템이 만드려고 하는 노드의 타입을 지원하지 않는다.
EINVAL mode가 일반 파일, 장치 특수 파일 또는 FIFO이외의 것을 생성하도록
요구한다.
EEXIST pathname이 이미 존재한다.
EFAULT pathname이 접근할 수 없는 주소 영역을 가르킨다.
EACCES 부모 디렉토리가 프로세스에게 쓰기를 허용하지 않거나 pathname에
있는 디렉토리중 하나가 프로세스에게 탐색(실행)을 허용하지
않는다.
ENAMETOOLONG
pathname이 너무 길다.
ENOENT pathname의 디렉토리가 존재하지 않거나 끊어진 심볼릭 링크이다.
ENOTDIR
pathnam디렉토리가 실제는 디렉토리가 아니다.
ENOMEM 사용할 수 있는 커널 메모리가 부족하다.
EROFS pathname이 읽기 전용 파일시스템의 파일을 가르킨다.
ELOOP pathname을 찾는 도중 너무 많은 심볼릭 링크가 존재한다.
ENOSPC pathname이 속한 장치에 새로운 노드를 만들기 위한 공간이 충분치
않다.
4.4BSD. 리눅스 버전은 SVr4 버전과는 다르게 파이프를 생성할 때 root
권한이 필요없고, EMULTIHOP, ENOLINK, EINTR과 같은 에러가 기술되어 있지
않다.
일반 파일을 생성하는 것은 불가능하다.
NFS의 프로토콜에는 많은 버그가 존재한다. 이런 버그는 mknod에 영향을
미친다.
stat(2), umask(2), mount(2), socket(2), fopen(3).