TRUNCATE(2)

名称
truncate, ftruncate - 指定した長さにファイルを切り捨てたり拡張したりする

ライブラリ
libc

書式
<unistd.h> int truncate(const char *path, off_t length) int ftruncate(int fd, off_t length)

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

戻り値

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

[ENOTDIR]
    パスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。

[ENOENT]
    指定されたファイルが存在しません。

[EACCES]
    前置パス名の構成要素について検索許可が拒否されています。

[EACCES]
    指定されたファイルにユーザが書き込めません。

[ELOOP]
    パス名を変換するときに検出されたシンボリックリンクが多すぎます。

[EISDIR]
    指定されたファイルがディレクトリになっています。

[EROFS]
    指定されたファイルは読取り専用ファイルシステム上にあります。

[ETXTBSY]
    ファイルが、実行中のピュアプロシージャ (共有テキスト) ファイルです。

[EIO]
    inode の更新をしている間に入出力エラーが発生しました。

[EFAULT]
    path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

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

[EBADF]
    fd 引数が有効な記述子ではありません。

[EINVAL]
    fd 引数はファイルではなくソケットを参照しています。

[EINVAL]
    fd 引数が書込み用に開いていません。

関連項目
open(2)

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

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

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