FALLOCATE(2) | Linux Programmer's Manual | FALLOCATE(2) |
名前
fallocate -ファイル空間の操作書式
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */
#include <fcntl.h>
int fallocate(int fd, int mode, off_t offset, off_t len);
説明
このシステムコールは、移植性のない、Linux 固有のシステムコールである。移植性が必要な場合は、ファイルに対してディスク空間を確実に確保するために、 POSIX.1 で規定された方法である posix_fallocate(3) を使うこと。ディスク領域の割り当て
fallocate() のデフォルトの動作 (つまり mode が 0 の場合) は、 offset と len で指定された範囲のディスク領域の割り当てと初期化を行う。 offset+ len がファイルサイズよりも大きかった場合、 ( stat(2) で報告される) ファイルサイズが変更される。このデフォルトの動作は、ライブラリ関数 posix_fallocate(3) の動作と非常に似ている。これは、このシステムコールが posix_fallocate(3) を最適に実装する手段を提供することを目的としているからである。割り当てはブロックサイズ単位で行われるため、 fallocate() は指定されたよりも大きなディスク領域を割り当てることがある。
ファイル空間の割り当て解除
Specifying the FALLOC_FL_PUNCH_HOLE flag (available since Linux 2.6.38) in mode deallocates space (i.e., creates a hole) in the byte range starting at offset and continuing for len bytes. Within the specified range, partial file system blocks are zeroed, and whole file system blocks are removed from the file. After a successful call, subsequent reads from this range will return zeroes.返り値
fallocate() は成功すると 0 を返し、エラーの場合は-1 を返す。エラー
- EBADF
- fd が有効なファイルディスクリプタでないか、書き込み用としてオープンされていない。
- EFBIG
- offset + len がファイルサイズの最大値よりも大きい。
- EINTR
- 実行中にシグナルが捕捉された。
- EINVAL
- offset が 0 未満だったか、 len が 0 以下だった。
- EIO
- ファイルシステムとの読み書き中に入出力エラーが発生した。
- ENODEV
- fd が通常のファイルかディレクトリを参照していない ( fd がパイプや FIFO を参照している場合、別のエラーが発生する)。
- ENOSPC
- fd が参照するファイルを含むデバイスに十分な空き領域がない。
- ENOSYS
- このカーネルでは fallocate() は実装されていない。
- EOPNOTSUPP
- fd が参照するファイルを含むファイルシステムが指定された操作をサポートしていない。 fd が参照するファイルを含むファイルシステムが mode をサポートしていない。
- EPERM
- The file referred to by fd is marked immutable (see chattr(1)). Or: mode specifies FALLOC_FL_PUNCH_HOLE and the file referred to by fd is marked append-only (see chattr(1)).
- ESPIPE
- fd がパイプか FIFO を参照している。
バージョン
fallocate() はカーネル 2.6.23 以降の Linux で利用可能である。 glibc での対応はバージョン 3.10 以降で行われている。 FALLOC_FL_* が glibc のヘッダファイルで定義されているのは、バージョン 2.18 以降のみである。準拠
fallocate() は Linux 固有である。関連項目
fallocate(1), ftruncate(2), posix_fadvise(3), posix_fallocate(3)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2013-02-12 | Linux |