概述
函数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函数时,此字段将被自动更新。
测试函数
使用带O_TRUNC选项的open函数将文件长度截短为0,但并不更改其访问时间及修改时间。为了做到这一点,首先用stat函数得到这些时间,然后截短文件,最后再用utime函数复位这两个时间。
#include <stdio.h>
#include <fcntl.h>
#include <utime.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
int main(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)
{
printf("%s: stat error", argv[i]);
continue;
}
if((fd = open(argv[i], O_RDWR | O_TRUNC)) < 0)
{
printf("%s: open error", argv[i]);
continue;
}
close(fd);
timebuf.actime = statbuf.st_atime;
timebuf.modtime = statbuf.st_mtime;
if(utime(argv[i], &timebuf) < 0)
{
printf("%s: utime error", argv[i]);
continue;
}
}
exit(0);
}
最后
以上就是顺利花卷为你收集整理的第三章_文件和目录 : 函数utime的全部内容,希望文章能够帮你解决第三章_文件和目录 : 函数utime所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复