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 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

[EPERM]
    特権が必要な呼び出しであったにも関わらず、 スーパユーザ以外のユーザによって呼び出されました。

関連項目
quota(1), fstab(5), edquota(8), quotacheck(8), quotaon(8), repquota(8)

バグ
このシステムコールを setrlimit(2) および getrlimit(2) で提供されるリソース制限に関するインタフェースと統合する、 何らかの方法があるはずです。

歴史
quotactl() システムコールは 4.3BSD Reno で登場しました。