swapon

Autres langues

Langue: ja

Version: 2007-06-22 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

名前

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

書式

#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 で指定されたファイルやブロック・デバイスにスワップ領域を設定する。 swapoff() は path で指定されたファイルやブロック・デバイスへのスワップを停止する。

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

(prio << SWAP_FLAG_PRIO_SHIFT) & SWAP_FLAG_PRIO_MASK

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

優先度

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

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

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

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 ケーパビリティを持っていない。 もしくは、最大数のスワップファイルがすでに使用されている (下記の「注意」の節を参照)。

準拠

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

注意

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

使用できるスワップファイルの数には上限があり、その上限は カーネル定数 MAX_SWAPFILES で定義される。 MAX_SWAPFILES の値は、カーネル 2.6.10 より前では 8、 カーネル 2.6.10 以降では 32 である。 カーネル 2.6.18 以降では、カーネルが CONFIG_MIGRATION オプションを有効にして作成された場合、 この上限が 2 少ない値 (つまり 30) となる (このカーネルでは、 mbind(2) と migrate_pages(2) のページ・マイグレーション機能用にスワップ・テーブルのエントリーが 二つ予約される)。

関連項目

mkswap(8), swapoff(8), swapon(8)