truncate - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 準拠
- 注意
- 関連項目
名前
truncate, ftruncate - 指定した長さにファイルを切り詰める
書式
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *
path
, off_t
length
);
int ftruncate(int
fd
, off_t
length
);
説明
truncate
()は
path
で指定されるファイルを、
ftruncate
()は
fd
で参照されるファイルを
length
バイトの長さになるように延長する、もしくは切り詰める。
もし切り詰める前のファイルが
length
より長ければ、length バイトを越える部分のデータは失われる。
もし切り詰める前のファイルが
length
より短かければ、伸張される。
伸張された部分を読んだ場合は NULL バイト ('\0') の列が返される。
ファイルオフセットは変更されない。
大きさが変更されると、ファイルの st_ctime と st_mtime フィールド
(それぞれ最終状態変更時刻、最終修正時刻;
stat
(2) 参照) が更新される。
また、set-user-ID と set-group-ID の許可ビットがクリアされるかもしれない。
ftruncate
()の場合、ファイルは書き込み用に開いていなければならない。
truncate
()の場合、ファイルは書き込み可能でなければならない。
返り値
成功した場合 0 が返る。失敗した場合 -1 が返り、
errno
がエラーの内容に従って設定される。
エラー
truncate
()では以下のエラーコードが定義されている。
-
EACCES
-
パスで指定されているディレクトリに検索許可のないものがある
(訳注:x ビットが立っていない)。
あるいは、指定されたファイルに対する書き込み許可を持っていない。
(
path_resolution
(2)も参照のこと)
-
EFAULT
-
path
がプロセスに割り当てられているアドレス空間外を指している。
-
EFBIG
-
引き数
length
が最大ファイルサイズより大きい。(XSI)
-
EINTR
-
実行中にシグナルを受けた。
-
EINVAL
-
引き数
length
が負数であるか、最大ファイルサイズより大きい。
-
EIO
-
inode の更新時に I/O エラーが発生した。
-
EISDIR
-
指定されたファイルはディレクトリである。
-
ELOOP
-
パス名を解釈する際にシンボリックリンクが多すぎた。
-
ENAMETOOLONG
-
パス名中のディレクトリ名が 255 文字を越えている、もしくはパス名全体が
1023 文字を越えている。
-
ENOENT
-
指定された名前のファイルが存在しない。
-
ENOTDIR
-
パス名中の項目にディレクトリではないものが入っている。
-
EPERM
-
下層にあるファイルシステムでは、現在のファイル長を越えて
ファイルを伸長することができない。
-
EROFS
-
指定されたファイルは読み出し専用のファイルシステム中にある。
-
ETXTBSY
-
指定されたファイルは実行されているファイルである。
ftruncate
()
にも同様のエラーが適用される。
但し、
path
に関するエラーの場合は代わりに
fd
に関するエラーとなる。
-
EBADF
-
fd
が無効なディスクリプター(descripter)である。
-
EBADF
または
EINVAL
-
fd
で指定されているものが書き込みモードで開かれていない。
-
EINVAL
-
fd
が通常のファイルを参照していない。
準拠
4.4BSD, SVr4, POSIX.1-2001 (これらのコールは 4.2BSD で初めて登場した)。
注意
上記の記述は XSI 準拠のシステムのものである。
XSI 非準拠のシステムの場合、POSIX 標準は
ftruncate
()に対して
length
がファイルの長さより長かった場合、
エラーを返すかファイルを伸張するかの二つの動作を許容している。
truncate
()に対しては全く規定されていない。
ほとんどの Unix 実装と同様、Linux はネイティブ (Linux 由来) の
ファイルシステムの扱いでは XSI 要求仕様にしたがっている。
しかしながら、いくつかの非ネイティブのファイルシステムでは、
truncate
()や
ftruncate
()を使って現在のファイル長を越えてファイルを伸長することができない。
Linux での有名な例としては VFAT がある。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする