文件和目录之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函数复位这两个时间。

[[email protected] apue]# cat prog4-6.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=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);
}

运行结果:

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

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

时间: 2024-11-03 21:56:20

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

关于文件、目录操作的函数

删除目录及目录下的文件(user ShellApi单元) function SHMyDelDirectory(const Source: string): boolean;  var fo: TSHFILEOPSTRUCT;  begin  FillChar(fo, SizeOf(fo), 0);  with fo do  begin  Wnd:= 0;   wFunc := FO_Delete;   pFrom := PChar(Source + #0);    pTo    := #0#0;

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

引用自"鱼c工作室"     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403 os.os.path 模块中关于文件.目录常用的函数使用方法: https://fishc.com.cn/forum.php?mod=viewthread&tid=45512&extr

常用的文件文件夹目录的操作函数

BuildPath() 生成一个文件路径 CopyFile() 复制文件 CopyFolder() 复制目录 CreateFolder() 创建新目录 CreateTextFile() 生成一个文件 DeleteFile() 删除一个文件 DeleteFolder() 删除一个目录 DriveExists() 检验盘符是否存在 Drives 返回盘符的集合 FileExists() 检验文件是否存在 FolderExists 检验一个目录是否存在 GetAbsolutePathName() 取得

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

1:创建多层目录 2:删除文件 3:显示上层目录 4:得到当前工作目录(重要) 5:删除单层目录 6:显示当前跟工作目录同一层的目录 7:执行系统的shell命令,这个例子是打开资源管理器 8:更改文件名 os.rename(old,new) 9:递归删除文件,如果不空抛出异常 10:切换工作目录 11:创建多层目录 12:创建目录

文件和目录:access函数

access函数是按照实际用户ID和实际组ID进行访问权限测试的: #include <unistd.h> int access( const char *pathname, int mode ); 返回值:若成功则返回0,若出错则返回-1 mode是表下所列常量的按位或 access函数的mode常量,取自<unistd.h> mode 说明 R_OK 测试读权限 W_OK 测试写权限 X_OK 测试执行权限 F_OK 测试文件是否存在 测试实例如下: #include<f

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

2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc(c,stdout) == EOF) 将字符写到标准输出 err_sys("output error"); if(ferror(stdin)) err_sys("input error"); exit(0);} 从标准输入读命令并执行:int main(){ char

文件查询之三:文件和目录的批量操作

经过之前两篇的随笔已经可以将所需要的文件和目录查找出来,并且保存在一个文档中,所以现在就是利用保存文件或目录的文档来进行批量处理,对文件或目录进行批量的 删除.复制和移动.主要是用到shutil模块中的函数和os模块中的函数进行一系列的操作.shutil模块存在大量的文件操作和目录操作的函数,包括常用的移动文件或复制文件 等操作,其中os和shutil下对于函数的功能存在交集,只不过相同功能下的函数名存在差异,函数上的细节处理方面也有可能不一样.在这里主要的是讲shutil模块下的函数. 首先是

文件和目录详解(九)---三种文件时间以及utime函数详解

文件有三种时间,分别是: 文件数据的最后访问时间------read函数会修改 文件数据的最后修改时间------write函数会修改 i 节点状态的最后更改时间----unlink函数会修改 要区分文件数据的修改时间和 i 节点状态更改时间,因为文件数据和 i 节点信息是分开存储的,有些系统调用只会影响 i 节点中的信息,而不会影响文件的数据部分,比如 unlink 函数. 使用 utime 函数可以修改一个文件的三种时间. ==================================

文件和目录:stat fstat lstat函数

文件和目录:stat fstat lstat函数 #include <sys/stat.h> int stat( const char *restrict pathname, struct stat *restrict buf ); int fstat( int filedes, struct stat *buf ); int lstat( const char *restrict pathname, struct stat *restrict buf );文件 三个函数的返回值:若成功则返回