CHFLAGS(2)

명칭
chflags, fchflags - 파일 플래그를 설정한다

프로그램 라이브러리
libc

서식
<sys/stat.h> <unistd.h> int chflags(const char *path, u_long flags) int fchflags(int fd, u_long flags)

해설
이름이 path 에 의해 지정되는 파일, 또는 기술자 fd 에 의해 참조되는 파일의 플래그가 flags (으)로 변경됩니다.

지정된 플래그는 다음의 값의 논리합 (or)을 취하는 것으로 작성됩니다.

UF_NODUMP
    그 파일을 dump 의 대상외로 합니다.
UF_IMMUTABLE
    그 파일은 변경 금지입니다.
UF_APPEND
    그 파일은 말미에의 추가만이 가능합니다.
UF_NOUNLINK
    그 파일은 이름을 변경하거나 삭제할 수 없습니다.
UF_OPAQUE
    유니온 파일 시스템의 스택을 통해서 볼 때, 이 디렉토리는 불투명합니다.
SF_ARCHIVED
    그 파일은 아카이브(archive) 가능합니다.
SF_IMMUTABLE
    그 파일은 변경 금지입니다.
SF_APPEND
    그 파일은 말미에의 추가만이 가능합니다.
SF_NOUNLINK
    그 파일은 이름을 변경하거나 삭제할 수 없습니다.

“UF_IMMUTABLE”, “UF_APPEND”, “UF_NOUNLINK”, “UF_NODUMP”, “UF_OPAQUE” 플래그는, 파일의 소유자 또는 슈퍼 유저의 어딘가에 따라 설정 또는 설정 해제할 수 있습니다. “SF_IMMUTABLE”, “SF_APPEND”, “SF_NOUNLINK”, “SF_ARCHIVED” 플래그는, 슈퍼 유저만이 설정 또는 설정 해제할 수 있습니다. 슈퍼 유저만을 설정할 수 있는 플래그를 슈퍼 유저가 아닌 것이 설정하려고 해도 경고없이 무시됩니다. 이러한 플래그는 언제라도 설정할 수 있습니다만, 통상은, 시스템이 싱글 유저 모드에 있을 때 만 설정 해제하는 것이 보통입니다 (상세한 것에 대하여는 init(8) (을)를 참조해 주세요).

반환값

에러
chflags() 의 처리는 이하의 경우에 실패합니다.

[ENOTDIR]
    패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다.

[ENAMETOOLONG]
    패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다.

[ENOENT]
    지정된 파일이 존재하지 않습니다.

[EACCES]
    지정된 패스에는, 검색이 허가되어 있지 않은 디렉토리가 포함되어 있습니다.

[ELOOP]
    패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다.

[EPERM]
    실효 유저 ID 가 파일의 소유자와 일치하지 않고, 한편, 실효 유저 ID 가 슈퍼 유저이지 않습니다.

[EROFS]
    지정된 파일은 읽기 전용 파일 시스템상에 있습니다.

[EFAULT]
    path (은)는, 프로세스에 할당할 수 있었던 address 공간의 범위외를 가리키고 있습니다.

[EIO]
    파일 시스템에 읽고 쓰기하고 있는 동안에 입출력 에러가 발생했습니다.

[EOPNOTSUPP]
    파일 시스템이 파일 플래그를 서포트하지 않습니다.

fchflags() 의 처리는 이하의 경우에 실패합니다.

[EBADF]
    기술자가 유효하지는 않습니다.

[EINVAL]
    fd 하지만 파일은 아니고 소켓을 참조하고 있습니다.

[EPERM]
    실효 유저 ID 가 파일의 소유자와 일치하지 않고, 실효 유저 ID 가 슈퍼 유저가 아닙니다.

[EROFS]
    파일이 읽어내 전용 시스템상에 존재하고 있습니다.

[EIO]
    파일 시스템에 읽고 쓰기하고 있는 동안에 입출력 에러가 발생했습니다.

[EOPNOTSUPP]
    파일 시스템이 파일 플래그를 서포트하지 않습니다.

관련 항목
chflags(1), fflagstostr(3), strtofflags(3), init(8), mount_union(8)

역사
chflags 함수와 fchflags 함수는 4.4BSD 그리고 처음 등장했습니다.