SWAPON(2)

名称
swapon, swapoff - インタリーブページング/スワップ用のスワップデバイスの制御

ライブラリ
libc

書式
<unistd.h> int swapon(const char *special) int swapoff(const char *special)

解説
swapon() システムコールは、システムがページングとスワッピングの割り当てに ブロックデバイス special を使用できるようにします。 潜在的に使用できるデバイスの名前はシステムに知られていて、 システム設定時に定義されます。 special のスワップ領域のサイズは、デバイスがスワッピングに 初めて使用できるようになるときに算出されます。

swapoff() システムコールは、与えられたデバイスのページングとスワッピングを無効にします。 すべての関連したスワップのメタデータは割り当て解除され、そのデバイスは 他の用途で利用可能にされます。

戻り値
エラーが発生した場合は -1 が返され、エラーを示すために errno が設定されます。

エラー
swapon() および swapoff() は共に以下の場合に失敗します:

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    指定したデバイスが存在しません。

[EACCES]
    指定されたパスには、検索が許可されていないディレクトリが含まれています。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EPERM]
    スーパユーザ以外のユーザによって呼び出されました。

[EFAULT]
    special 引数がプロセスに割り当てられたアドレス空間の外側を指しています。

加えて、 swapon() は以下の理由で失敗します:

[EINVAL]
    システムがブート時のスワップデバイス数 vm.nswapdev の制限に達しています。

[ENOTBLK]
    special 引数はブロックデバイスではありません。

[EBUSY]
    special で指定したデバイスは、すでにスワッピングに使用できるようになっています。

[ENXIO]
    special のメジャーデバイス番号が範囲外になっています (これは関連するハードウェアに対応するデバイスドライバが 存在しないことを表します)。

[EIO]
    スワップデバイスをオープンする間に入出力エラーが発生しました。

最後に、 swapoff() は以下の場合に失敗します:

[EINVAL]
    現在、システムが special にスワップしていません。

[ENOMEM]
    与えられたデバイスのページングとスワッピングを安全に無効化するための 仮想メモリが十分に利用できません。

関連項目
config(8), swapon(8), sysctl(8)

歴史
swapon() システムコールは、 4.0BSD で登場しました。 swapoff() システムコールは、 FreeBSD 5.0 で登場しました。