Unix-system-calls-ftruncate

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

truncate()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

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* ()および *ftruncate* ()関数は、_path_で指定された、または_fd_で参照された通常のファイルを正確に_length_バイトのサイズに切り捨てます。

ファイルが以前にこのサイズより大きかった場合、余分なデータは失われます。 以前にファイルが短かった場合、ファイルは拡張され、拡張部分はヌルバイト(「\ 0」)として読み取られます。 ファイルオフセットは変更されません。

サイズが変更された場合、ファイルのst_ctimeおよびst_mtimeフィールド(それぞれ、最後のステータス変更の時刻と最後の変更の時刻。 stat (2)を参照)が更新され、set-user-IDおよびset-group -ID許可ビットはクリアされます。

*ftruncate* ()を使用すると、ファイルは書き込み用に開いている必要があります。 *truncate* ()では、ファイルは書き込み可能でなければなりません。

返り値

成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。

エラー

*truncate* ()の場合:

エラーコード

説明

*EACCES*

パスプレフィックスのコンポーネントの検索許可が拒否されているか、指定されたファイルがユーザーによって書き込み可能ではありません。 ( path_resolution (2)も参照してください。)

*EFAULT*

_Path_は、プロセスに割り当てられたアドレス空間の外側を指します。

*EFBIG*

引数_length_は、最大ファイルサイズより大きくなっています。 (XSI)

*EINTR*

実行中にシグナルがキャッチされました。

*EINVAL*

引数_length_が負であるか、最大ファイルサイズより大きくなっています。

*EIO*

iノードの更新中にI/Oエラーが発生しました。

*EISDIR*

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

*ELOOP*

パス名の変換中に検出されたシンボリックリンクが多すぎます。

*ENAMETOOLONG*

パス名のコンポーネントが255文字を超えているか、パス名全体が1023文字を超えています。

*ENOENT*

指定されたファイルは存在しません。

*ENOTDIR*

パスプレフィックスのコンポーネントはディレクトリではありません。

*EPERM*

基礎となるファイルシステムは、現在のサイズを超えるファイルの拡張をサポートしていません。

*EROFS*

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

*ETXTBSY*

このファイルは、実行中の純粋なプロシージャ(共有テキスト)ファイルです。

*ftruncate* ()についても同じエラーが適用されますが、_path_で間違っている可能性があるものの代わりに、_fd_で間違っている可能性があるものがあります。
*EBADF*

_fd_は有効な記述子ではありません。

*EBADF* または *EINVAL*

_fd_は書き込み用に開いていません。

*EINVAL*

_fd_は通常のファイルを参照しません。

準拠

4.4BSD、SVr4、POSIX.1-2001(これらの呼び出しは4.2BSDで初めて登場しました)。

ノート

上記の説明は、XSI準拠のシステム用です。 非XSI準拠システムの場合、POSIX標準では、_length_がファイルの長さを超える場合、 ftruncate ()の2つの動作を許可しています(このような環境では truncate ()がまったく指定されていないことに注意してください):エラーを返すか、またはファイルを拡張します。

ほとんどのUnix実装と同様に、Linuxはネイティブファイルシステムを扱う際にXSI要件に従います。 ただし、一部の非ネイティブファイルシステムでは、 truncate ()および ftruncate ()を使用してファイルを現在の長さを超えて拡張することを許可していません。Linuxで注目すべき例はVFATです。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements