Manpages

이 름

mknod − 디 렉 토 리 또 는 특 별 한 또 는 일 반 적 인 파 일 을 생 성 한 다 .

사 용 법

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int mknod(const char *pathname, mode_t mode, dev_t dev);

설 명

mknodmodedev 로 명 시 된 , pathname 이 름 의 파 일 시 스 템 노 드 (파 일 , 장 치 특 수 파 일 또 는 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가 그 룹 소 유 권 을 갖 는 다 .

반 환 값

mknod는 성 공 시 , 0을 리 턴 하 고 에 러 시 , -1을 리 턴 한 다 (이 경 우 errno는 적 절 히 설 정 된 다 ).

에 러

EPERM

mode가 FIFO (named 파 이 프 ) 이 외 의 것 을 생 성 하 려 하 고 , 호 출 한 프 로 세 스 의 권 한 이 슈 퍼 유 저 (superuser)가 아 니 다 ; 또 한 pathname이 포 함 된 파 일 시 스 템 이 만 드 려 고 하 는 노 드 의 타 입 을 지 원 하 지 않 는 다 .

EINVAL

mode가 일 반 파 일 , 장 치 특 수 파 일 또 는 FIFO이 외 의 것 을 생 성 하 도 록 요 구 한 다 .

EEXIST

pathname이 이 미 존 재 한 다 .

EFAULT

pathname이 접 근 할 수 없 는 주 소 영 역 을 가 르 킨 다 .

EACCES

부 모 디 렉 토 리 가 프 로 세 스 에 게 쓰 기 를 허 용 하 지 않 거 나 pathname에 있 는 디 렉 토 리 중 하 나 가 프 로 세 스 에 게 탐 색 (실 행 )을 허 용 하 지 않 는 다 .

ENAMETOOLONG

pathname이 너 무 길 다 .

ENOENT

pathname의 디 렉 토 리 가 존 재 하 지 않 거 나 끊 어 진 심 볼 릭 링 크 이 다 .

ENOTDIR

pathname의 디 렉 토 리 가 실 제 는 디 렉 토 리 가 아 니 다 .

ENOMEM

사 용 할 수 있 는 커 널 메 모 리 가 부 족 하 다 .

EROFS

pathname이 읽 기 전 용 파 일 시 스 템 의 파 일 을 가 르 킨 다 .

ELOOP

pathname을 찾 는 도 중 너 무 많 은 심 볼 릭 링 크 가 존 재 한 다 .

ENOSPC

pathname이 속 한 장 치 에 새 로 운 노 드 를 만 들 기 위 한 공 간 이 충 분 치 않 다 .

호 환

SVr4 (그 러 나 호 출 하 기 위 해 서 는 권 한 이 필 요 하 다 . POSIX는 아 니 다 .) 4.4BSD. 리 눅 스 버 전 은 SVr4 버 전 과 는 다 르 게 파 이 프 를 생 성 할 때 root 권 한 이 필 요 없 고 , EMULTIHOP, ENOLINK, EINTR과 같 은 에 러 가 기 술 되 어 있 지 않 다 .

버 그

mknod는 디 렉 토 리 나 소 켓 파 일 을 생 성 할 수 없 고 슈 퍼 유 저 가 아 닌 유 저 가 일 반 파 일 을 생 성 하 는 것 은 불 가 능 하 다 .

NFS의 프 로 토 콜 에 는 많 은 버 그 가 존 재 한 다 . 이 런 버 그 는 mknod에 영 향 을 미 친 다 .

관 련 항 목

read(2), write(2), fcntl(2), close(2), unlink(2), open(2), mkdir(2), stat(2), umask(2), mount(2), socket(2), fopen(3).

역 자

정 동 현 <dhjung [AT] serome.kr>, 2000년 4월 20일