utimes() - Unix,Linux系統呼叫
廣告
名稱
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 的actime 和modtime 欄位。
如果buf 為NULL,則檔案的時間戳將設定為當前時間。
在以下情況下允許更改時間戳:程序具有相應的許可權(Linux:具有CAP_FOWNER功能),或者有效使用者ID等於檔案的使用者ID,或者buf必須為NULL並且程序對檔案具有寫許可權。
utimbuf 結構為:
struct utimbuf {
time_t actime; /* access time */
time_t modtime; /* modification time */
};
|
utime() 函式允許以1秒的解析度指定時間戳。utimes() 函式類似,但允許以1微秒的解析度。這裡times[0] 指訪問時間,times[1] 指修改時間。 timeval 結構為:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
|
返回值
成功時,返回零。出錯時,返回-1,並適當地設定errno。
錯誤
標籤 | 描述 |
EACCES | 拒絕搜尋path路徑字首中的一個目錄的許可權(另見path_resolution(2)),或者buf為NULL並且程序沒有許可權更改時間戳(見上文)。 |
ENOENT |
filename不存在。 |
EPERM |
buf不為NULL並且程序沒有許可權更改時間戳。 |
EROFS |
path位於只讀檔案系統上。 |
備註
Linux不允許更改不可變檔案的時間戳,也不允許將只追加檔案的的時間戳設定為當前時間以外的時間。
在libc4和libc5中,utimes()只是utime()的包裝器,因此不允許亞秒級解析度。
POSIX.1-2001將utimes()標記為舊版,這很奇怪,因為它比utime()提供了更多功能。
錯誤
Linux沒有仔細區分EACCES和EPERM錯誤返回。另一方面,POSIX.1-2001在其對utimes()的錯誤描述中存在錯誤。
符合標準
utime(): SVr4, POSIX.1-2001。
utimes(): 4.3BSD
參見
廣告
|