other versions
| TRUNCATE(2) | Linux Programmer's Manual | TRUNCATE(2) | 
名前¶
truncate, ftruncate - 指定した長さにファイルを切り詰める書式¶
#include <unistd.h>glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
truncate():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
  _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
 
|| /* glibc 2.12 以降: */
  _POSIX_C_SOURCE >= 200809L
ftruncate():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
  _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
 
|| /* glibc 2.3.5 以降: */
  _POSIX_C_SOURCE >= 200112L
説明¶
truncate() は path で指定されるファイルを、 ftruncate() は fd で参照されるファイルを length バイトの長さになるように延長する、もしくは切り詰める。 もし切り詰める前のファイルが length より長ければ、length バイトを越える部分のデータは失われる。 もし切り詰める前のファイルが length より短かければ、伸張される。 伸張された部分を読んだ場合はヌルバイト ('\0') の列が返される。 ファイルオフセットは変更されない。 大きさが変更されると、ファイルの st_ctime と st_mtime フィールド (それぞれ最終状態変更時刻、最終修正時刻; stat(2) 参照) が更新される。 また、set-user-ID と set-group-ID の許可ビットがクリアされるかもしれない。 ftruncate() の場合、ファイルは書き込み用に開いていなければならない。 truncate() の場合、ファイルは書き込み可能でなければならない。返り値¶
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー¶
truncate() では以下のエラーコードが定義されている。- EACCES
 - パスで指定されているディレクトリに検索許可のないものがある (訳注:x ビットが立っていない)。 あるいは、指定されたファイルに対する書き込み許可を持っていない。 ( path_resolution(7) も参照のこと)
 
- EFAULT
 - path がプロセスに割り当てられているアドレス空間外を指している。
 
- EFBIG
 - 引き数 length が最大ファイルサイズより大きい。(XSI)
 
- EINVAL
 - 引き数 length が負数であるか、最大ファイルサイズより大きい。
 
- EIO
 - inode の更新時に I/O エラーが発生した。
 
- EISDIR
 - 指定されたファイルはディレクトリである。
 
- ELOOP
 - パス名を解釈する際にシンボリックリンクが多すぎた。
 
- ENAMETOOLONG
 - パス名中のディレクトリ名が 255 文字を越えている、もしくはパス名全体が 1023 文字を越えている。
 
- ENOENT
 - 指定された名前のファイルが存在しない。
 
- ENOTDIR
 - パス名の構成要素がディレクトリではない。
 
- EPERM
 - 下層にあるファイルシステムでは、現在のファイル長を越えて ファイルを伸長することができない。
 
- EROFS
 - ファイルが読み込み専用 (read only) のファイルシステム上にある。
 
- ETXTBSY
 - 指定されたファイルは実行されているファイルである。
 
- EBADF
 - fd が無効なディスクリプターである。
 
- 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 の truncate() と ftruncate() システムコールは 大きなファイルオフセットを扱えるように設計されていなかった。 その結果、大きなファイルファイルを扱うことができる truncate64() と ftruncate64() システムコールが Linux 2.4 で追加された。 ただし、glibc を使ったアプリケーションではこれらの詳細は気にする必要はない。 glibc のラッパー関数は新しいシステムコールが利用できる場合にはそれらを利用する ようになっているからである。 いくつかの 32 ビットアーキテクチャでは、これらのシステムコールの呼び出し時のシグネチャーが違っています。理由は syscall(2) で説明されている通りです。バグ¶
glibc 2.12 のヘッダファイルにはバグがあり、 ftruncate() の宣言を公開するのに必要な _POSIX_C_SOURCE の最小値が 200112L ではなく 200809L となっていた。 このバグは、これ以降のバージョンの glibc では修正されている。関連項目¶
open(2), stat(2), path_resolution(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。| 2013-04-01 | Linux |