kazmax - Linux で自宅サーバー

swapon - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 優先度
  5. 返り値
  6. エラー
  7. 準拠
  8. 注意
  9. 関連項目

名前

swapon, swapoff - ファイル/デバイスへのスワップ (swap) を開始/停止する

書式

#include <unistd.h>
#include <asm/page.h> /* PAGE_SIZE を見つけるため */
#include <sys/swap.h>
int swapon(const char * path , int swapflags );
int swapoff(const char * path );

説明

swapon ()は path で指定されたファイルやブロック・デバイス (block device) に スワップ領域 (swap area) を設定する。 swapoff ()は path で指定されたファイルやブロック・デバイスへのスワップを停止する。

swapon ()は swapflags 引き数を取る。 swapflagsSWAP_FLAG_PREFER ビットが設定された場合は、新しいスワップ領域はデフォルトよりも高い 優先度 (priority) を持つ。 優先度は swapflags に以下のようにコード化されている。

" (prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK"

これらの関数は特権プロセス ( CAP_SYS_ADMIN ケーパビリティ (capability) を持つプロセス) のみが使用できる。

優先度

それぞれのスワップ領域は高い (high) と低い (low) のどちらかの 優先度を持つ。デフォルトの優先度は低い。 低い優先度の領域において、新しい領域は古い領域よりさらに低い 優先度を持つ。

swapflags が設定されたものは全て高い優先度となり、デフォルトよりも高い優先度を持つ。 使用者 (caller) はそれらに負でない値が指定できる。 大きな数字は高い優先度を意味する。

高い優先度の領域から順にスワップ・ページ (swap page) として使用される。 より低い優先度の領域を使用する前により高い優先度の 領域を使い切る。もし二つ以上の領域が同じ優先度を持ち、 使える中で一番高い優先度であれば、それらのページは間で ラウンド・ロビン (round robin) 方式で配分される。

Linux 1.3.6 において、カーネルは通常はこれらの規則に従っている。 しかし例外も存在している。

返り値

成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

EBUSY
( swapon ()において) 指定された path が既にスワップ領域として使用されている。
EINVAL
ファイル path は存在するが、通常のファイルもブロック・デバイスも参照していない。 または swapon ()において、指定された path に有効なスワップの署名 (signature) がない。 または swapoff ()において、 path が現在のところスワップ領域でない。
ENFILE
オープンされたファイルの総数がシステムの制限に達した。
ENOENT
ファイル path が存在しない。
ENOMEM
スワップを開始するのに十分なメモリーがシステムにない。
EPERM
使用者が CAP_SYS_ADMIN ケーパビリティを持っていないか、全てのスワップが使用されている。( CONFIG_MIGRATION が有効な場合、スワップファイルの最大数は MAX_SWAPFILES-2 (30; Linux 2.4.10以降)、そうでなければ MAX_SWAPFILES (以前は 8; Linux 2.4.10 以降は 32) のスワップファイルが使用できる。)

準拠

これらの関数は Linux 特有であり、移植を意図したプログラムでは 使用してはいけない。 二番目の swapflags 引き数は Linux 1.3.2 から導入された。

注意

パーティション (partition) やパスは   mkswap (8) によって準備されていなければならない。

関連項目