EN JA
QUOTACTL(2)
QUOTACTL(2) FreeBSD System Calls Manual QUOTACTL(2)

名称

quotactlファイルシステム割り当て制限を操作する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < 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 に指定できます。これがどう解釈されるかは、各コマンド毎に後述します。

id 識別子を使用するコマンドのために、それは、-1 または任意の正の数のいずれかでなければなりません。-1 の値は、現在の UID か GID が使用されるべきであることを示します。その他の負の数は、エラーを返します。

現時点で、割り当て制限は、“ufs”ファイルシステムについてのみサポートされています。“ufs”の場合、コマンドは、主たるコマンド (後述) および id 引数の解釈方法を指示するコマンドタイプで構成されます。コマンドタイプは、 id をユーザ識別子として解釈する (USRQUOTA) と、グループ識別子として解釈する (GRPQUOTA) がサポートされています。“ufs”固有のコマンドは、次の通りです:

Q_QUOTAON
path で指定されるファイルシステム用のディスク割り当て制限を有効にします。コマンドタイプには、有効にする割り当て制限の種類を指定します。 addr 引数には、割り当て制限情報を取り出すファイルを指定します。割り当て制限を記録したファイルが存在している必要があります。このファイルは、通常、 quotacheck(8) プログラムで作成されます。 id 引数は、使用されません。スーパユーザだけが割り当て制限をオンにできます。
Q_QUOTAOFF
path で指定されるファイルシステムに対する、ディスク割り当て制限を無効にします。コマンドタイプには、無効にする割り当て制限の種類を指定します。 addr 引数と id 引数は、使用されません。スーパユーザだけが割り当て制限をオフにできます。
Q_GETQUOTASIZE
(コマンドタイプによって決定される) ユーザまたはグループのための割り当てを表すために使用されるワードサイズ (wordsize) を取得する。指定できる値は、古いスタイルの割り当てファイルに対して 32 で、新しいスタイルの割り当てファイルに対して 64 です。 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 引数は、無視されます。

戻り値

The quotactl() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

quotactl() システムコールは、次の場合に失敗します:
[ EOPNOTSUPP]
カーネルが QUOTA オプションを指定してコンパイルされていません。
[ EUSERS]
割り当て制限のテーブルを拡張できません。
[ EINVAL]
cmd 引数またはコマンドタイプが無効です。 Q_GETQUOTASIZE, Q_GETQUOTA, Q_SETQUOTAQ_SETUSE では、クォータは、このシステムに対して現在有効ではありません。

Q_GETQUOTA, Q_SETQUOTA または Q_SETUSE への id 引数が負の数です。

[ EACCES]
Q_QUOTAON において、割り当て制限情報ファイルがプレーンファイルではありません。
[ EACCES]
指定されたパスには、検索が許可されていないディレクトリが含まれています。
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
指定されたファイルが存在しません。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ EROFS]
Q_QUOTAON で、割り当てが有効にされているファイルシステムが、読み込み専用でマウントされているか、または割り当てファイルが、読み込み専用のファイルシステム上にあります。
[ EIO]
割り当て制限を記録したファイルに読み書きしている間に I/O (入出力) エラーが発生しました。
[ EFAULT]
無効な addr が指定されました。対応する構造体をカーネルに、またはカーネルからコピーできませんでした。
[ EFAULT]
path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。
[ EPERM]
特権が必要な呼び出しであったにも関わらず、スーパユーザ以外のユーザによって呼び出されました。

歴史

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

バグ

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