utime() - Unix 和 Linux 系統呼叫 - 技術教學
Tutorials Point


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

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

utime() - 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 */
};

返回值

成功時,返回 0。錯誤時,返回 -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

廣告


  

廣告



廣告
© . All rights reserved.