Unix-system-calls-ftruncate
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
- http://www.finddevguides.com/computer_glossary [コンピュータ用語集] *http://www.finddevguides.com/computer_whoiswho[Who is Who]
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 |