一个文件的访问和修改时间可以用utime函数更改。

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

此函数所使用的数据结构是:

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-.c
#include "apue.h"
#include <fcntl.h>
#include <utime.h> int
main(int argc, char *argv[])
{
int i, fd;
struct stat statbuf;
struct utimbuf timebuf; for(i=; i<argc; i++)
{
if(stat(argv[i], &statbuf) < )
{
err_ret("%s: stat error", argv[i]);
continue;
}
if((fd = open(argv[i], O_RDWR | O_TRUNC)) < )
{
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) < )
{
err_ret("%s: utime error", argv[i]);
continue;
}
}
exit();
}

运行结果:

[root@localhost apue]# ls -l file.hole
-rw-r--r-- root root - : file.hole
[root@localhost apue]# date
2014年 01月 03日 星期五 :: PST
[root@localhost apue]# ./prog4- file.hole
[root@localhost apue]# ls -l file.hole
-rw-r--r-- root root - : file.hole
[root@localhost apue]# ls -lu file.hole
-rw-r--r-- root root - : file.hole
[root@localhost apue]# ls -lc file.hole
-rw-r--r-- root root - : file.hole

正如我们所预见的一样,最后修改时间和最后访问时间未变。但是更改状态时间则更改为程序运行时的时间。

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

文件和目录之utime函数的更多相关文章

  1. python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法

    引用自“鱼c工作室”     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...

  2. os、os.path模块中关于文件、目录常用的函数使用方法

    os模块中关于文件/目录常用的函数使用方法 函数名 使用方法   getcwd()   返回当前工作目录   chdir(path)   改变工作目录   listdir(path='.')   列举 ...

  3. python编程os、os.path 模块中关于文件、目录常用的函数使用方法

    os模块中关于文件/目录常用的函数使用方法   函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...

  4. 文件和目录之umask函数

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. umask函数为进程设置文件模式创建屏蔽字,并 ...

  5. 文件和目录:access函数

    access函数是按照实际用户ID和实际组ID进行访问权限测试的: #include <unistd.h> int access( const char *pathname, int mo ...

  6. 文件和目录之access函数

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 当用open函数打开一个文件时,内核以进程的有 ...

  7. UNIX,基础知识,文件IO,文件和目录

    2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...

  8. php中检查文件或目录是否存在的代码小结

    检查文件或目录是否存在 ,我们使用了php中常用的函数file_exists,这个函数就可以实现我想要的功能,下面大家慢慢参考一下下面是一个简单的检查文件是否存在的实例代码: <?php $fi ...

  9. Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)

    Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...

随机推荐

  1. Eclipse文件编码设置的问题

    Eclipse中设置编码的方式 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出, 则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺 ...

  2. spinner 设置文本框中的字体颜色

    onItemSelected(AdapterView parent, View v, int position, long id) { TextView v1 = (TextView)v; v1.se ...

  3. android利用WebView实现浏览器的封装

    android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...

  4. Cgroups概述

    1. Cgroups是什么? 从 2.6.24 版本开始,linux 内核提供了一个叫做 Cgroups的特性.Cgroups是control groups的缩写,是一种可以限制.记录.隔离进程组(p ...

  5. Codeforces 628D 数位dp

    题意:d magic number(0<=d<9)的意思就是一个数,从最高位开始奇数位不是d,偶数位是d 题目问,给a,b,m,d(a<=b,m<2000)问,a,b之间有多少 ...

  6. Educational Codeforces Round 3 E (609E) Minimum spanning tree for each edge

    题意:一个无向图联通中,求包含每条边的最小生成树的值(无自环,无重边) 分析:求出这个图的最小生成树,用最小生成树上的边建图 对于每条边,不外乎两种情况 1:该边就是最小生成树上的边,那么答案显然 2 ...

  7. DNS (二)协议

    报文字段含义: 标识字段 由客户程序设置并由服务器返回结果.客户程序通过它来确定响应与查询是否匹配. 标志字段 协商具体的通信方式和反馈通信状态随后的 4个16 bit字段说明最后 4个变长字段中包含 ...

  8. 设计模式_Strategy_策略模式

    形象例子: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦.策略模式: 策 ...

  9. 有关ftp批量传送文件或文件夹

    以ftp 批量上传文件时 可以用 mput file1 file2 .. 但是这样没传送一个就会问是否传送下一个 ,那么可以使用prompt这个命令.这是个双向开关,执行一次是取消提示,在执行一次是打 ...

  10. SQL2008--行号的得到

    WITH DataTable AS( select *, ROW_NUMBER() OVER(order by ID) as Rowno from (select * from UserInfo) a ...