UTIME

Section: Linux Programmer's Manual (2)
Updated: 2007-07-27
Index JM Home Page roff page
 

名前

utime, utimes - inode のアクセス時刻/修正時刻を変更する  

書式

#include <sys/types.h>

#include <utime.h> int utime(const char *filename, const struct utimbuf *buf); #include <sys/time.h> int utimes(const char *filename, const struct timeval times[2]);
 

説明

utime() は filename で示される inode のアクセス時刻と修正時刻を buf 中の actimemodtime にそれぞれ変更する。

bufNULL の場合、ファイルのアクセス時刻と修正時刻は現在の時刻に設定される。

タイムスタンプの変更は以下の場合に許可される: プロセスに適切な特権がある (Linux では CAP_FOWNER ケーパビリティ (capability) がある)。 または実効 (effective) ユーザ ID が、ファイルのユーザ ID と等しい。 または buf が NULL で、かつプロセスがファイルへの書き込み許可を持っている。

構造体 utimbuf は以下に示すようになっている。

struct utimbuf {
    time_t actime;       /* アクセス時刻 */
    time_t modtime;      /* 修正時刻 */
};

関数 utime() は 1 秒の分解能でタイムスタンプを指定することができる。  

utimes()

関数 utimes() は utime() と同様であるが、 times 引き数で 1 マイクロ秒の分解能のタイムスタンプを指定することができる。 構造体 timeval は以下に示す通りである。

struct timeval {
    long tv_sec;        /* 秒 */
    long tv_usec;       /* マイクロ秒 */
};

times[0] は新しいアクセス時刻を、 times[1] は新しい修正時刻を規定する。 times が NULL の場合、 utime() 同様、ファイルのアクセス時刻と修正時刻は現在の時刻に設定される。  

返り値

成功した場合 0 が返る。失敗した場合 -1 が返り、 errno がエラーの内容に従って設定される。  

エラー

EACCES
path を構成する何れかのディレクトリに検索許可がない (path_resolution(7) も参照すること)。 または buf が NULL で、かつプロセスにタイムスタンプの変更許可がない (上記を参照すること)。
ENOENT
filename が存在しない。
EPERM
buf が NULL でなく、かつプロセスにタイムスタンプの変更許可がない。
EROFS
path が読み込み専用のファイルシステム上にある。
 

準拠

utime(): SVr4, POSIX.1-2001.
utimes(): 4.3BSD  

注意

Linux では、不変 (immutable) ファイルのタイムスタンプを変更したり、 追加専用 (append-only) のファイルに現在時刻以外のタイムスタンプを 設定したりすることは、許可されていない。

libc4 と libc5 では、 utimes() は単に utime() のラッパー (wrapper) である。 そのため秒以下を指定することはできない。

POSIX.1-2001 では utimes() は過去の名残であるとされているが、不思議なことに utimes() は utime() よりも高機能である。  

バグ

Linux は EACCESEPERM エラーの区別に注意を払っていない。 また POSIX.1-2001 では utimes() のエラーの記述にバグがある。  

関連項目

chattr(1), futimesat(2), stat(2), futimes(3)


 

Index

名前
書式
説明
utimes()
返り値
エラー
準拠
注意
バグ
関連項目

This document was created by man2html, using the manual pages.
Time: 04:32:10 GMT, November 19, 2007