utime、utimes
函数原型
#include <sys/types.h>
#include <utime.h>
#include <utime.h>
int utime(const char *filename, const struct utimbuf *times);
#include <sys/time.h>
int utimes(const char *filename, const struct timeval times[2]);
参数
The utimbuf structure is:
struct utimbuf {
time_t actime; /* access time */
time_t modtime; /* modification time */
};
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
功能
一个文件的访问和修改时间可以用utime更改。times = NULL时,则访问时间和修改时间都设置为当前时间。设置时间的前提条件是(满足其一即可):进程的有效用户ID等于所有者ID 或进程队于该文件具有写权限。times !=NULL时,访问时间和修改时间设置为times指向的结构体中的时间数据。此时进程对文件仅具有写权限是不够的,还需要进程的有效ID必须等于该文件的所有者ID,或者它是超级用户进程。
utimes函数用于修改文件的存取时间和更改时间。
unix环境高级编程的例子
#include <fcntl.h>
#include <utime.h>
#include <stdio.h>
#include <stdlib.h>
struct utimenuf
{
time_t actime;
time_t modtime;
};
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);
}