이 름
chown, fchown, lchown − 파 일 에 대 한 소 유 권 을 바 꾼 다 .
사 용 법
#include
<sys/types.h>
#include <unistd.h>
int
chown(const char *path, uid_t
owner, gid_t group);
int fchown(int fd, uid_t owner,
gid_t group);
int lchown(const char *path, uid_t
owner, gid_t group);
설 명
path나 fd로 지 정 된 파 일 의 소 유 자 를 바 꾼 다 . 슈 퍼 사 용 자 (root)만 이 파 일 의 소 유 자 를 바 꿀 수 있 다 . 파 일 의 소 유 자 는 파 일 의 그 룹 을 그 소 유 자 가 멤 버 인 어 떤 그 룹 으 로 바 꿀 수 있 다 . 슈 퍼 사 용 자 는 임 의 로 그 룹 을 변 경 할 수 있 다 .
owner나 group가 −1로 지 정 되 었 다 면 , 그 ID는 바 뀌 지 않 는 다 .
실 행 파 일 의 소 유 자 나 그 룹 이 슈 퍼 사 용 자 (root)가 아 닌 사 용 자 에 의 해 변 경 되 면 , S_ISUID 그 리 고 S_ISGID 모 드 비 트 는 지 워 진 다 (clear). POSIX는 루 트 (root)가 chown을 할 때 이 작 업 이 실 행 가 능 한 지 여 부 를 기 술 하 지 않 는 다 ; 리 눅 스 에 서 는 이 작 업 이 커 널 버 전 에 의 존 한 다 . 그 룹 에 의 해 실 행 되 는 파 일 이 아 닐 경 우 에 는 S_ISGID 비 트 는 권 고 잠 금 (mandatory locking)을 가 리 키 며 (S_IXGRP bit는 지 워 진 다 ), chown에 의 해 지 워 지 지 않 는 다 .
반 환 값
성 공 시 , 0을 반 환 한 다 . 에 러 시 , −1이 반 환 하 며 , errno는 적 당 한 값 으 로 설 정 된 다 .
에 러
파 일 시 스 템 에 의 존 하 여 , 다 른 에 러 코 드 가 반 환 될 수 있 다 . chown의 일 반 적 인 에 러 목 록 은 다 음 과 같 다 :
EPERM |
유 효 UID는 파 일 의 소 유 자 와 일 치 하 지 않 으 며 0이 아 니 다 ; 또 는 소 유 자 나 그 룹 이 정 확 히 지 정 되 지 않 았 다 . | ||
EROFS |
지 정 된 파 일 이 읽 기 -전 용 파 일 시 스 템 에 있 다 . | ||
EFAULT |
path가 접 근 할 수 없 는 주 소 공 간 을 가 리 키 고 있 다 . |
ENAMETOOLONG
path가 너 무 길 다 .
ENOENT |
파 일 이 존 재 하 지 않 는 다 . |
|||
ENOMEM |
이 용 할 수 있 는 커 널 메 모 리 가 충 분 하 지 않 다 . |
ENOTDIR
경 로 명 의 앞 부 분 (prefix)이 디 렉 토 리 가 아 니 다 .
EACCES |
찾 기 허 가 권 이 경 로 명 의 앞 부 분 에 서 거 부 되 었 다 . |
|||
ELOOP |
너 무 많 은 심 볼 릭 링 크 를 path에 서 만 났 다 . |
fchown의 일 반 적 에 러 는 아 래 와 같 다 :
EBADF |
기 술 자 가 유 효 하 지 않 다 . |
|||
ENOENT |
위 를 참 조 해 라 . |
|||
EPERM |
위 를 참 조 해 라 . |
|||
EROFS |
위 를 참 조 해 라 . |
|||
EIO |
하 위 레 벨 I/O 에 러 가 inode 수 정 시 발 생 했 다 . |
주 의
2.1.81이 전 의 리 눅 스 버 전 에 서 chown는 심 볼 릭 링 크 를 허 용 하 지 않 는 다 . 리 눅 스 커 널 2.1.81 이 후 에 , chown 심 볼 릭 링 크 를 허 용 하 며 , 새 로 운 시 스 템 콜 lchown는 심 볼 릭 링 크 를 허 용 하 지 않 는 다 . 리 눅 스 커 널 2.1.86 이 후 에 , 이 새 로 운 시 스 템 콜 (예 전 의 chown과 같 은 의 미 을 가 지 고 있 는 )은 같 은 시 스 템 콜 수 를 가 지 고 있 으 며 , chown에 서 는 새 로 운 시 스 템 콜 수 를 가 지 게 되 었 다 .
fchown의 원 형 은 _BSD_SOURCE가 정 의 되 어 있 을 경 우 에 만 이 용 할 수 있 다 .
호 환
chown 시 스 템 콜 은 SVr4, SVID, POSIX, X/OPEN 에 서 확 실 하 다 . 4.4BSD 버 전 은 슈 퍼 사 용 자 만 이 사 용 할 수 있 다 .(즉 , 일 반 적 인 사 용 자 는 파 일 을 바 꿀 수 없 다 .) SVr4 문 서 는 EINVAL, EINTR, ENOLINK 그 리 고 EMULTIHOP 반 환 을 문 서 화 했 지 만 , ENOMEM은 아 니 다 . POSIX.1에 서 는 ENOMEM 또 는 ELOOP 에 러 조 건 을 문 서 화 하 지 않 았 다 .
fchown 시 스 템 콜 은 4.4BSD 그 리 고 SVr4 에 서 확 실 하 다 . SVr4은 EINVAL, EIO, EINTR, 그 리 고 ENOLINK 에 러 조 건 을 추 가 적 으 로 문 서 화 했 다 .
제 한
chown()의 의 미 (semantic)은 UID 대 응 이 가 능 한 NFS 파 일 시 스 템 에 서 는 적 용 되 지 않 을 수 도 있 다 . 추 가 적 으 로 , 파 일 내 용 을 접 근 하 는 모 든 시 스 템 콜 의 의 미 은 적 용 되 지 않 을 수 있 다 . 왜 냐 하 면 chown()가 이 미 열 려 진 파 일 에 접 근 취 소 를 일 으 킬 수 있 기 때 문 이 다 . 클 라 이 언 트 쪽 캐 싱 (caching)은 소 유 권 이 사 용 자 의 접 근 을 허 용 하 도 록 바 뀔 수 있 는 시 간 과 파 일 이 다 른 클 라 이 언 트 쪽 사 용 자 에 의 해 접 근 될 수 있 는 시 간 사 이 에 연 기 될 지 도 모 른 다 .
관 련 항 목
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 5월 26일