EN JA
TRUNCATE(2)
TRUNCATE(2) FreeBSD System Calls Manual TRUNCATE(2)

名称

truncate, ftruncate指定した長さにファイルを切り詰めたり拡張したりする

ライブラリ

Standard C Library (libc, -lc)

書式

#include < unistd.h>

int
truncate( const char *path, off_t length);

int
ftruncate( int fd, off_t length);

解説

truncate() システムコールは、 path で指定されるファイルか fd で参照されるファイルのサイズが、 length バイトになるように切り詰めたり拡張します。ファイルがこのサイズより大きい場合は、余分なデータが失われます。ファイルがこのサイズより小さい場合は、0 が書き込まれたように拡張されます。 ftruncate() では、ファイルが書み込み用にオープンしている必要があります。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error. 変更されるファイルがディレクトリでなくまたは通常のファイルでもないなら、 truncate() 呼び出しは、効果なく、値 0 を返します。

エラー

truncate() システムコールは、以下のような場合に処理を失敗します:
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
指定されたファイルが存在しません。
[ EACCES]
前置パス名の構成要素について検索許可が拒否されています。
[ EACCES]
指定されたファイルにユーザが書き込めません。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ EPERM]
指定されたファイルには、不変または追加専用フラグが設定されています、詳細については、 chflags(2) マニュアルページを参照してください。
[ EISDIR]
指定されたファイルがディレクトリになっています。
[ EROFS]
指定されたファイルは読み込み専用ファイルシステム上にあります。
[ ETXTBSY]
ファイルが、実行中のピュアプロシージャ (共有テキスト) ファイルです。
[ EFBIG]
length 引数が最大のファイルサイズより大きかった。
[ EINVAL]
length 引数は、0 未満でした。
[ EIO]
inode の更新をしている間に入出力エラーが発生しました。
[ EFAULT]
path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

ftruncate() システムコールは、以下のような場合に処理を失敗します:

[ EBADF]
fd 引数が有効な記述子ではありません。
[ EINVAL]
fd 引数はファイルではなくソケットを参照しています。
[ EINVAL]
fd 引数が書み込み用にオープンされていません。

関連項目

chflags(2), open(2)

歴史

truncate() システムコールは、 4.2BSD で登場しました。

バグ

この呼出しは、ファイルのある範囲を放棄できるように一般化する必要があります。

truncate() を使用してファイルを拡張すると、移植性が失われます。

December 13, 2006 FreeBSD