utimes() - ファイル・アクセス時間と変更時間の設定

標準

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

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

両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/time.h>

int utimes(const char *path, const struct timeval times[2]);

機能説明

utimes() 関数は、path 引数によって指示された ファイルのアクセス時間と変更時間を times 引数の値に 設定します。

times 引数は、2 つの timeval 構造体の 配列です。最初の配列メンバーは最後のアクセスの日時を表し、2 番目の メンバーは最後の変更の日時を表します。timeval 構造体 の時間はエポック以降の秒数とマイクロ秒で測定されますが、ファイルに保管された実際の時間は最も近い秒数に丸められます。timeval メンバーは次のとおりです。
tv_sec
1970 年 1 月 1 日からの秒数。(UTC)
tv_usec
マイクロ秒。

times 引数が NULL ポインターの場合には、ファイルの アクセス時間と変更時間は現在時間に設定されます。utime() 関数の同じプロセス特権要件が utimes() で必要です。最後のファイル状況変更、stat() の フィールド st_ctime は、現在時間で更新されます。

注: utimes() 関数は Single UNIX Specification、バージョン 3 のレガシー・オプション・グループ に既に移動されていて、将来のバージョンで廃止する可能性があります。移植性の観点からは、utime() 関数 が推奨されます。

戻り値

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

正常に実行されなかった場合、utimes() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EACCES
プロセスには、path 接頭部のあるコンポーネントに 対する検索許可がありません。あるいは次のすべてが該当します。
  • times は NULL です。
  • プロセスの有効ユーザー ID は、ファイルの所有者に一致して いません。
  • プロセスにはファイルに対する書き込み許可がありません。
  • プロセスには適切な特権がありません。
ELOOP
ループがシンボリック・リンクに存在しています。このエラーが出されるのは、(limits.h ヘッダー・ファイルに定義されている) POSIX_SYMLOOP より 大きいシンボリック・リンクが path の解決で検出された場合です。
ENAMETOOLONG
_POSIX_NO_TRUNC が有効ですが、pathPATH_MAX 文字より長いか、または path の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代わりに使われる パス名のストリングの長さが PATH_MAX を超えています。PATH_MAX 値と NAME_MAX 値は 、pathconf() を使用して確認できます。
ENOTDIR
path 接頭部のコンポーネントの一部がディレクトリーではありません。
ENOTENT
path という名前のファイルがないか、あるいは path 引数が空ストリングです。
EPERM
times が NULL でない場合には、呼び出しプロセスの 有効ユーザー ID はファイルの所有者に一致せず、呼び出しプロセスに は適切な特権はありません。
EROFS
path は読み取り専用ファイル・システムにあります。

関連情報