FALLOCATE
Section: Linux Programmer's Manual (2)
Updated: 2009-03-13
Index
JM Home Page
roff page
名前
fallocate - ファイル空間の操作
書式
#define _GNU_SOURCE
#include <fcntl.h>
int fallocate(int fd, int mode, off_t offset, off_t len);
説明
このシステムコールは、移植性のない、Linux 固有のシステムコールである。
移植性が必要な場合は、ファイルに対してディスク空間を確実に確保するために、
POSIX.1 で規定された方法である
posix_fallocate(3)
を使うこと。
fallocate()
を使うと、
fd
が参照するファイルに割り当てられたディスク空間を直接操作できる。
操作対象は、
offset
から始まる長さ
len
バイトの領域である。
mode
引き数は、指定された領域に対して実行する操作を指定する。
現在のところ、
mode
に指定できるフラグは以下の一つだけである。
- FALLOC_FL_KEEP_SIZE
-
このフラグは、
offset
と
len
で指定された領域のディスク空間を割り当て、その空間を 0 で初期化する。
呼び出しが成功すると、それに続いてこの領域への書き込みが行われるが、
ディスク空間の不足による書き込み失敗が発生しないことが保証される。
ファイル末尾より後ろの領域について 0 で埋めたブロックを前もって
割り当てておくことは、追記 (append) の作業負荷を最適化するのに
有用である。
ファイルサイズが
offset+len
よりも小さい場合であっても、ブロックの前もっての割り当てにより
(stat(2)
が返す) ファイルサイズは変更されることはない。
FALLOC_FL_KEEP_SIZE
フラグが
mode
に指定されなかった場合、デフォルトの動作は
FALLOC_FL_KEEP_SIZE
フラグが指定された場合とほとんど同じとなる。
唯一の違いは、
offset + len
がファイルサイズよりも大きかった場合、呼び出しが成功すると
ファイルサイズが変更される点である。
このデフォルトの動作は、ライブラリ関数
posix_fallocate(3)
の動作と非常に似ている。これは
posix_fallocate(3)
を最適に実装する手段を提供することを目的としているからである。
割り当てはブロックサイズ単位で行われるため、
fallocate()
は指定されたよりも大きな領域を割り当てることがある。
返り値
fallocate()
は成功すると 0 を返し、エラーの場合は -1 を返す。
エラー
- EBADF
-
fd
が有効なファイルディスクリプタでないか、
書き込み用としてオープンされていない。
- EFBIG
-
offset + len
がファイルサイズの最大値よりも大きい。
- EINTR
-
実行中にシグナルが捕捉された。
- EINVAL
-
offset
が 0 未満であるか、
len
が 0 以下である。
- EIO
-
ファイルシステムとの読み書き中に入出力エラーが発生した。
- ENODEV
-
fd
が通常のファイルかディレクトリを参照していない
(fd
がパイプや FIFO を参照している場合、別のエラーが発生する)。
- ENOSPC
-
fd
が参照するファイルを含むデバイスに十分な空き領域がない。
- ENOSYS
-
fd
が参照するファイルを含むファイルシステムが
指定された操作をサポートしていない。
- EOPNOTSUPP
-
fd
が参照するファイルを含むファイルシステムが
mode
をサポートしていない。
バージョン
fallocate()
はカーネル 2.6.23 以降の Linux で利用可能である。
glibc での対応はバージョン 3.10 以降で行われている。
準拠
fallocate()
は Linux 固有である。
関連項目
ftruncate(2),
posix_fadvise(3),
posix_fallocate(3)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:41 GMT, April 25, 2010