国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

文件和目錄之utime函數

2024-06-28 13:28:46
字體:
來源:轉載
供稿:網友
文件和目錄之utime函數

一個文件的訪問和修改時間可以用utime函數更改。

#include <utime.h>int utime( const char *pathname, const struct utimbuf *times );返回值:若成功則返回0,若出錯則返回-1

此函數所使用的數據結構是:

struct utimbuf {    time_t actime;    /* access time */    time_t modtime;    /* modification time */}

此結構中的兩個時間值是日歷時間。這是自1970年1月1日00:00:00以來國際標準時間所經過的秒數。

此函數的操作以及執行它所要求的特權取決于times參數是否是NULL。

如果times是一個空指針,則訪問時間和修改時間兩者都設置為當前時間。為了執行此操作必須滿足下列兩個條件之一:進程的有效用戶ID必須等于該文件的所有者ID;或者進程對該文件必須具有寫權限。

如果times是非空指針,則訪問時間和修改時間被設置為times所指向結構中的值。此時,進程的有效用戶ID必須等于該文件的所有者ID,或者進程必須是一個超級用戶進程。對文件只有寫權限是不夠的。

注意,我們不能對更改狀態時間st_ctime指定一個值,當調用utime函數時,此字段將被自動更新。

在某些UNIX系統版本中,touch(1)命令使用此函數。另外,標準歸檔程序tar(1)和cpio(1)可選地調用utime,以便將一個文件的時間設置為將它歸檔時保存的時間值。

程序清單4-6 utime函數實例

使用帶O_TRUNC選項的open函數將文件長度截短為0,但并不更改其訪問時間及修改時間。為了做到這一點,首先用stat函數得到這些時間,然后截短文件,最后再用utime函數復位這兩個時間。

[root@localhost apue]# cat PRog4-6.c #include "apue.h"#include <fcntl.h>#include <utime.h>intmain(int argc, char *argv[]){        int             i, fd;        struct stat     statbuf;        struct utimbuf  timebuf;        for(i=1; i<argc; i++)        {                if(stat(argv[i], &statbuf) < 0)                {                        err_ret("%s: stat error", argv[i]);                        continue;                }                if((fd = open(argv[i], O_RDWR | O_TRUNC)) < 0)                {                        err_ret("%s: open error", argv[i]);                        continue;                }                close(fd);                timebuf.actime = statbuf.st_atime;                timebuf.modtime = statbuf.st_mtime;                if(utime(argv[i], &timebuf) < 0)                {                        err_ret("%s: utime error", argv[i]);                        continue;                }        }        exit(0);}

運行結果:

[root@localhost apue]# ls -l file.hole-rw-r--r-- 1 root root 0 12-30 00:38 file.hole[root@localhost apue]# date2014年 01月 03日 星期五 16:34:48 PST[root@localhost apue]# ./prog4-6 file.hole[root@localhost apue]# ls -l file.hole-rw-r--r-- 1 root root 0 12-30 00:38 file.hole[root@localhost apue]# ls -lu file.hole-rw-r--r-- 1 root root 0 12-30 00:38 file.hole[root@localhost apue]# ls -lc file.hole-rw-r--r-- 1 root root 0 01-03 16:34 file.hole

正如我們所預見的一樣,最后修改時間和最后訪問時間未變。但是更改狀態時間則更改為程序運行時的時間。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 廊坊市| 岢岚县| 廉江市| 维西| 天峻县| 奉节县| 泽库县| 赞皇县| 井陉县| 西充县| 太康县| 东莞市| 文成县| 自贡市| 古丈县| 嘉兴市| 民勤县| 六安市| 海晏县| 新干县| 阳春市| 岑巩县| 永德县| 特克斯县| 崇礼县| 兴城市| 嘉鱼县| 通城县| 綦江县| 绍兴市| 连平县| 图片| 阳信县| 辉县市| 侯马市| 古交市| 泰和县| 丰台区| 富宁县| 张家港市| 绥芬河市|