truncate() - 指定長へのファイルの切り捨て

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <unistd.h>

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

機能説明

path によって指示されたファイルを 指示された length まで切り捨てます。 呼び出しプロセスは、ファイルの書き込み許可をもっている 必要があります。ファイル・サイズが length を超えると、超過分のデータは廃棄さ れます。ファイル・サイズが length よりも小さいと、古い長さと新しい長さの間 のバイトがゼロとして読み取られます。ファイルのサイズへの変更は、ファイル・オフセットには影響を与えません。

truncate() によって、ファイル・サイズがプロセスの ソフト・ファイル・サイズ限界を超えると、truncate() は 失敗し、SIGXFSZ シグナルがそのプロセスに対して生成されます。

正常に実行された場合、truncate() は、ファイルの st_ctime フィールドと st_mtime フィールドにマークを付けます。

正常に実行されなかった場合、ファイルは変更されません。

z/OS UNIX の大規模ファイルのサポート: AMODE 64 C/C++ アプリケーションの場合は、z/OS UNIX の大規模ファイルが自動的にサポートされます。AMODE 31 C/C++ アプリケーションは、オプション LANGLVL(LONGLONG) を指定してコンパイルされなければなりません。また、ヘッダーがインクルードされる前に _LARGE_FILES フィーチャー・テスト・マクロを定義して、2 GB のサイズより大きい z/OS UNIX ファイルをこの関数が操作できるようにしなければなりません。ファイル・サイズとオフセット・フィールドは、63 ビットの幅に拡張されます。したがって、_LARGE_FILES フィーチャー・テスト・マクロの定義も行うには、ファイルを操作する他のいずれかの関数が必要です。

戻り値

正常に実行された場合、truncate() は 0 を戻します。

正常に実行されなかった場合、truncate() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EFBIG
長さの引数が、最大ファイル・サイズより大きくなっています。
EINTR
実行時にシグナルがキャッチされました。
EINVAL
path が正規のファイルを指していないか、指定された長さが正しくありません。
EIO
ファイル・システムの読み取りまたは書き込み時に、入出力エラーが発生しました。
EISDIR
指定されたファイルはディレクトリーです。システムは、ディレクトリーで要求された関数を実行できません。
EROFS
ファイルが読み取り専用ファイル・システムにあります。

関連情報