QUOTACTL(2)

명칭
quotactl - 파일 시스템 할당 제한을 조작한다

프로그램 라이브러리
libc

서식
<sys/types.h> <ufs/ufs/quota.h> int quotactl(const char *path, int cmd, int id, void *addr)

해설
quotactl() 시스템 콜은, 파일 시스템의 할당 제한을 유효나 무효로 하거나 조작합니다. cmd 그리고 주어진 할당 제한 제어 명령은, id 그리고 지정된 유저와 path 그리고 지정된 파일에 대해서 동작합니다 (주: cmd 의 값을 명확하게 나타내기 위해서(때문에), <ufs/ufs/quota.h> 그리고 정의되고 있다 QCMD 매크로를 사용해야 합니다). 옵션으로서 각 명령 고유의 데이터 구조체의 주소를 addr (으)로 지정할 수 있습니다. 이것이 어떻게 해석될까는 각 명령마다 후술 합니다.

현시점에서, 할당 제한은 “ufs” 파일 시스템에 대한 보고 서포트되고 있습니다. “ufs” 의 경우, 명령은 주된 커멘드 (후술) 및 id 인수의 해석 방법을 지시하는 명령 타입으로 구성됩니다. 명령 타입은, id (을)를 유저 식별자로서 해석하는 (USRQUOTA)와 그룹 식별자로서 해석하는 (GRPQUOTA)가 서포트되고 있습니다. “ufs” 고유의 명령은 다음과 같습니다.

Q_QUOTAON
    path 그리고 지정되는 파일 시스템용의 디스크 할당 제한을 유효하게 합니다. 명령 타입에는 유효하게 하는 할당 제한의 종류를 지정합니다. addr 인수에는, 할당 제한 정보를 꺼내는 파일을 지정합니다. 할당 제한을 기록한 파일이 존재하고 있을 필요가 있습니다. 이 파일은 통상, quotacheck(8) 프로그램으로 작성됩니다. id 인수는 사용되지 않습니다. 슈퍼 유저만이 할당 제한을 온으로 할 수 있습니다.

Q_QUOTAOFF
    path 그리고 지정되는 파일 시스템에 대한, 디스크 할당 제한을 무효로 합니다. 명령 타입에는, 무효로 하는 할당 제한의 종류를 지정합니다. addr 인수와 id 인수는 사용되지 않습니다. 슈퍼 유저만이 할당 제한을 오프로 할 수 있습니다.

Q_GETQUOTA
    식별자 id 그리고 지정되는 유저 또는 그룹 (어디에서 있을까는 명령 타입에 의해 결정됩니다) 의, 디스크 할당 제한과 현재의 사용 상황을 취득합니다. addr (은)는, struct dqblk 구조체 (<ufs/ufs/quota.h> 그리고 정의되고 있습니다)를 가리키는 포인터입니다.

Q_SETQUOTA
    식별자 id 그리고 지정되는 유저 또는 그룹 (어디에서 있을까는 명령 타입에 의해 결정됩니다) 의 디스크 할당 제한을 설정합니다. addr (은)는, struct dqblk 구조체 (<ufs/ufs/quota.h> 그리고 정의되고 있습니다)를 가리키는 포인터입니다. dqblk 구조체의 사용 상황을 나타내는 필드는 무시됩니다. 이 호출은 슈퍼 유저인 만큼 제한되고 있습니다.

Q_SETUSE
    식별자 id 그리고 지정되는 유저 또는 그룹 (어디에서 있을까는 명령 타입에 의해 결정됩니다) 의 디스크 사용 제한을 설정합니다. addr (은)는, struct dqblk 구조체 (<ufs/ufs/quota.h> 그리고 정의되고 있습니다)를 가리키는 포인터로, 사용 상황을 나타내는 필드만이 사용됩니다. 이 호출은 슈퍼 유저인 만큼 제한되고 있습니다.

Q_SYNC
    할당 사용 상황의, 디스크상의 카피를 갱신합니다. 명령 타입에는, 어느 타입의 할당 제한을 갱신하는지를 지정합니다. id 파라미터와 addr 파라미터는 무시됩니다.

반환값

에러
quotactl() 호출은 다음의 경우에 실패합니다.

[EOPNOTSUPP]
    커널이 QUOTA 옵션을 지정해 컴파일 되고 있지 않습니다.

[EUSERS]
    할당 제한의 테이블을 확장할 수 없습니다.

[EINVAL]
    cmd 또는 명령 타입이 무효입니다. Q_GETQUOTA 및 Q_SETQUOTA 그럼, 쿼터는 이 시스템에 대해서 현재 유효하지는 않습니다.

[EACCES]
    Q_QUOTAON 에 두어, 할당 제한 정보 파일이 프레인 파일이 아닙니다.

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

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

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

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

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

[EROFS]
    Q_QUOTAON 그리고, 할당 제한을 기록한 파일이 읽기 전용 파일 시스템상에 있습니다.

[EIO]
    할당 제한을 기록한 파일에 읽고 쓰기하고 있는 동안에 I/O (입출력) 에러가 발생했습니다.

[EFAULT]
    무효인 addr 하지만 지정되었습니다. 대응하는 구조체를 커널에, 또는 커넬로부터 카피할 수 없었습니다.

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

[EPERM]
    특권이 필요한 호출이었음에도 관련되지 않고, 슈퍼 유저 이외의 유저에 의해 불려 갔습니다.

관련 항목
quota(1), fstab(5), edquota(8), quotacheck(8), quotaon(8), repquota(8)

버그
이 시스템 콜을 setrlimit(2) 및 getrlimit(2) 그리고 제공되는 리소스 제한에 관한 인터페이스와 통합하는, 어떠한 방법이 있을 것입니다.

역사
quotactl() 함수는 4.3BSD Reno 그리고 등장했습니다.