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 またはコマンドタイプが無効です。

[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 で登場しました。