utimes() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix初學者指南
  Unix Shell程式設計
  高階Unix
  Unix有用參考
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

utimes() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

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的訪問和修改時間更改為bufactimemodtime 欄位。

如果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

參見



previous next Printer Friendly

廣告


  

廣告



廣告