TRUNCATE(2)

名前
truncate, ftruncate - 指定した長さにファイルを切り詰める

書式
#include <unistd.h>

int truncate(const char *path, size_t length);
int ftruncate(int fd, size_t length);

説明
truncate は path で指定されるファイルを、 ftruncate は fd で示されるファイルを length バイトの長さになるように延長する、もしくは切り詰める。もし切り詰める前 のファイルが length より長ければ、length バイトを越える部分のデータは失われる。 ftruncate ではファイルは書き込み用にオープンされている必要がある。 (訳注:延長された部分を読む場合0が返る)

返り値
成功した場合 0 が返る。失敗した場合 -1 が返り、 errno がエラーの内容に従って設定される。

エラー
truncate では

ENOTDIR
    path 中の項目にディレクトリではないものが入っている。

EINVAL
    パス名中の文字に上位ビットがセットされているものがある。 (訳注:「そのファイルシステムにて対応できない名前が使われている」)

ENAMETOOLONG
    パス名中のディレクトリ名が 255 文字を越えている、もしくはパス名全体が 1023 文字を越えている。

ENOENT
    指定された名前のファイルが存在しない。

EACCES
    パスで指定されているディレクトリに search 許可のないものがある。 (訳注:x ビットが立っていない)

EACCES
    指定されたファイルに対する書き込み許可を持っていない。

ELOOP
    パス名を解釈する際にシンボリックリンクが多すぎた。

EISDIR
    指定されたファイルはディレクトリである。

EROFS
    指定されたファイルは読み出し専用のファイルシステム中にある。

ETXTBSY
    指定されたファイルは実行されているファイルである。

EIO inode の更新時に I/O エラーが発生した。

EFAULT
    path がプロセスに割り当てられているアドレス空間の外を指している。

ftruncate に対して

EBADF
    fd が無効なディスクリプター(descripter)である。

EINVAL
    fd で指されているものはファイルではなくソケットである。

EINVAL
    fd で指されているファイルが書き込み用にオープンされていない。

準拠
4.4BSD, SVr4 (これらの関数は BSD 4.2 に始めて使われた)。SVr4 には他の エラーコードとして、 truncate には EINTR, EMFILE, EMULTIHP, ENAMETOOLONG, ENFILE, ENOLINK, ENOTDIR が、 ftruncate には EAGAIN と EINTR がそれぞれ記述されている。

バグ
これらの関数は、ファイルから切り捨てるバイト数も指定できるように 一般化すべきである。

関連項目
open(2)