.\" Copyright (c) 2007 Silicon Graphics, Inc. All Rights Reserved .\" Written by Dave Chinner .\" May be distributed as per GNU General Public License version 2. .\" .\" Japanese Version Copyright (c) 2007 Akihiro MOTOKI .\" all rights reserved. .\" Translated 2007-10-16, Akihiro MOTOKI , LDP v2.66 .\" Updated 2008-10-13, Akihiro MOTOKI , LDP v3.11 .\" .TH FALLOCATE 2 2010-09-10 "Linux" "Linux Programmer's Manual" .SH 名前 fallocate \- ファイル空間の操作 .SH 書式 .nf .BR "#define _GNU_SOURCE" " /* feature_test_macros(7) 参照 */" .B #include .BI "int fallocate(int " fd ", int " mode ", off_t " offset \ ", off_t " len ");" .fi .SH 説明 このシステムコールは、移植性のない、Linux 固有のシステムコールである。 移植性が必要な場合は、ファイルに対してディスク空間を確実に確保するために、 POSIX.1 で規定された方法である .BR posix_fallocate (3) を使うこと。 .BR fallocate () を使うと、 .I fd が参照するファイルに割り当てられたディスク空間を直接操作できる。 操作対象は、 .I offset から始まる長さ .I len バイトの領域である。 .I mode 引き数は、指定された領域に対して実行する操作を指定する。 現在のところ、 .I mode に指定できるフラグは以下の一つだけである。 .TP .B FALLOC_FL_KEEP_SIZE このフラグは、 .I offset と .I len で指定された領域のディスク空間を割り当て、その空間を 0 で初期化する。 呼び出しが成功すると、それに続いてこの領域への書き込みが行われるが、 ディスク空間の不足による書き込み失敗が発生しないことが保証される。 ファイル末尾より後ろの領域について 0 で埋めたブロックを前もって 割り当てておくことは、追記 (append) の作業負荷を最適化するのに 有用である。 ファイルサイズが .IR offset + len よりも小さい場合であっても、ブロックの前もっての割り当てにより .RB ( stat (2) が返す) ファイルサイズは変更されることはない。 .\" .\" Note from Amit Arora: .\" There were few more flags which were discussed, but none of .\" them have been finalized upon. Here are these flags: .\" FA_FL_DEALLOC, FA_FL_DEL_DATA, FA_FL_ERR_FREE, FA_FL_NO_MTIME, .\" FA_FL_NO_CTIME .\" All of the above flags were debated upon and we can not say .\" if any/which one of these flags will make it to the later kernels. .PP .B FALLOC_FL_KEEP_SIZE フラグが .I mode に指定されなかった場合、デフォルトの動作は .B FALLOC_FL_KEEP_SIZE フラグが指定された場合とほとんど同じとなる。 唯一の違いは、 .I "offset + len" がファイルサイズよりも大きかった場合、呼び出しが成功すると ファイルサイズが変更される点である。 このデフォルトの動作は、ライブラリ関数 .BR posix_fallocate (3) の動作と非常に似ている。これは .BR posix_fallocate (3) を最適に実装する手段を提供することを目的としているからである。 .PP 割り当てはブロックサイズ単位で行われるため、 .BR fallocate () は指定されたよりも大きな領域を割り当てることがある。 .SH 返り値 .BR fallocate () は成功すると 0 を返し、エラーの場合は \-1 を返す。 .SH エラー .TP .B EBADF .I fd が有効なファイルディスクリプタでないか、 書き込み用としてオープンされていない。 .TP .B EFBIG .I offset + len がファイルサイズの最大値よりも大きい。 .TP .B EINTR 実行中にシグナルが捕捉された。 .TP .B EINVAL .I offset が 0 未満であるか、 .I len が 0 以下である。 .TP .B EIO ファイルシステムとの読み書き中に入出力エラーが発生した。 .TP .B ENODEV .I fd が通常のファイルかディレクトリを参照していない .RI ( fd がパイプや FIFO を参照している場合、別のエラーが発生する)。 .TP .B ENOSPC .I fd が参照するファイルを含むデバイスに十分な空き領域がない。 .TP .B ENOSYS .I fd が参照するファイルを含むファイルシステムが 指定された操作をサポートしていない。 .TP .B EOPNOTSUPP .I fd が参照するファイルを含むファイルシステムが .I mode をサポートしていない。 .SH バージョン .BR fallocate () はカーネル 2.6.23 以降の Linux で利用可能である。 glibc での対応はバージョン 3.10 以降で行われている。 .SH 準拠 .BR fallocate () は Linux 固有である。 .SH 関連項目 .BR ftruncate (2), .BR posix_fadvise (3), .BR posix_fallocate (3)