十四、文件和目录——文件时间和utime函数

14.1 文件时间

  存在于 stat 结构体中

  

14.2 文件时间函数

14.2.1 介绍

  utime(修改文件的存取时间和更改时间)
  相关函数 utimes,stat

1 #include <sys/types.h>
2 #include <utime.h>
3 int utime(const char * filename, struct utimbuf * buf);
  • 函数功能

    • 更改文件的存取和修改时间
    • utime 会自动更新 st_ctime 的值
  • 参数 buf
    • 空指针:则取当前时间

      • 进程的有效用户 ID 必须等于该文件的所有者ID
      • 或者进程对该文件具有写权限
    • 非空:取 utimebuf 结构体中的时间
      • 进程有效用户ID 等于该文件的所有者ID
      • 或者进程是超级用户进程    
  • 返回值
    • 如果参数buf为空指针(NULL),则该文件的存取时间和更改时间全部会设为目前时间。
    • 执行成功则返回 0,失败返回-1,错误代码存于errno。
  • 错误代码
    • EACCESS 存取文件时被拒绝,权限不足
    • ENOENT 指定的文件不存在。
1 结构体 utimbuf 定义如下
2 struct utimbuf{
3     time_t actime;  //访问时间
4     time_t modtime;  //修改时间
5 };

14.2.3 例子

  file_time.c

 1 #include <time.h>
 2 #include <sys/types.h>
 3 #include <utime.h>
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 #include <errno.h>
 7 #include <sys/stat.h>
 8 #include <fcntl.h>
 9 #include <string.h>
10 #include <unistd.h>
11 #include <memory.h>
12
13 // ctime 函数 将事件转换成字符串输出
14 void out(struct stat buff)
15 {
16     time_t val_atime = (time_t)buff.st_atime;
17     time_t val_mtime = (time_t)buff.st_mtime;
18     time_t val_ctime = (time_t)buff.st_ctime;
19     printf("atime: %s\n", ctime(&val_atime));
20     printf("mtime: %s\n", ctime(&val_mtime));
21     printf("ctime: %s\n", ctime(&val_ctime));
22 }
23
24 //获取文件属性信息
25 struct stat get_stat(char *file, struct stat buff)
26 {
27     memset(&buff, 0, sizeof(buff));
28     if(lstat(file, &buff) < 0) {
29         perror("lstat error");
30         exit(1);
31     }
32
33     return buff;
34 }
35
36 int main(int argc, char *argv[])
37 {
38     if(argc < 2) {
39         fprintf(stderr, "usage:%s file\n", argv[0]);
40         exit(1);
41     }
42
43     struct stat buff;
44     buff = get_stat(argv[1], buff);
45
46     //备份原先的时间
47     struct stat bak_stat = buff;
48     out(buff);
49     printf("=============================\n");
50
51     //设置文件的事件为当前系统时间
52     utime(argv[1], NULL);
53     buff = get_stat(argv[1], buff);
54     out(buff);
55     printf("=============================\n");
56
57     //把文件的时间恢复成之前的时间
58     struct utimbuf timebuf;
59     timebuf.actime = bak_stat.st_atime;
60     timebuf.modtime = bak_stat.st_mtime;
61     utime(argv[1], &timebuf);
62     buff = get_stat(argv[1], buff);
63     out(buff);
64
65     return 0;
66 }

  编译执行:

  

  ctime 的时间是 i 节点的最后更改时间,只要调用了 utime 就会自动修改  ctime。

原文地址:https://www.cnblogs.com/kele-dad/p/9065306.html

时间: 2024-12-14 10:19:57

十四、文件和目录——文件时间和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 );文件 三个函数的返回值:若成功则返回

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

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

第二十四节(Java文件流,缓冲流)

Java流 文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符序列称为字符流. Java 中根据流的方向可 以分为输入流和输出流. 输入流是将文件或其它输入设备的数据加载到内存的过程: 输出流恰恰相反, 是将内存中的数据保存到文件或其他输出设备. 见图: 文件是由字符或字节构成, 那么将文件加载到内存或再将文件输出到文件, 需要有输入和输出流的支持,那么在 Java 语言中又把输入和输出流分为了两个,字节输入和输出流,字符输入和输出流 InputStream 是字节

UNIX环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数

lienhua342014-09-16 1 文件的时间 每个文件都有三个时间字段,如表 1 所示. 表 1: 文件的三个时间字段 说明 字段 st_atime 文件数据的最后访问时间 st_mtime 文件数据的最后修改时间 st_ctime i 节点状态的最后更改时间 最后修改时间是文件内容最后一次被修改的时间.更改状态时间是该文件的 i 节点最后一次被修改的时间. 2 utime 函数 utime 函数提供了对文件最后访问时间和最后修改时间的更改功能. #include <utime.h>

TortoiseSVN设置忽略文件和目录文件夹

在多数项目中你总会有文件和目录不需要进行版本控制.这可能包括一些由编译器生成的文件,*.obj,*.lst,或许是一个用于存放可执行程序的输出文件夹.只要你提交修改,TortoiseSVN 就会在提交对话框的文件列表中显示出未版本控制文件.当然你可以关闭这个显示,不过你可能会忘记添加新的源文件. 最好的避免类似问题的方法是添加参考文件到该项目的忽略列表.这样他们就永远不会出现在提交对话框中,而真正的未版本控制文件则仍然列出. 方法一 在资源管理器中,右键一个未加入版本控制文件或目录,并从弹出菜单

selenium python (十四)上传文件的处理

#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加.所以一般会卡在如何操作本地window窗口.解决的方法很简单,只需要定位到上传按钮,然后通过send_keys添加本地文件路径即可from selenium import webdriverimport  osimport time driver = webdriver.Firefox() #打开

【iCore3 双核心板】例程十四:FATFS实验——文件操作

实验指导书及代码包下载: http://pan.baidu.com/s/1dEpechF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229438677

【转】nginx禁止访问某个文件和目录(文件夹)

nginx禁止访问所有.开头的隐藏文件设置 location ~* /.* {deny all;} nginx禁止访问目录, 例如:禁止访问path目录 location ^~ /path {deny all;} 可以把path换成实际需要的目录,目录path后是否带有"/",带"/"只禁止访问目录,不带"/"禁止访问目录中的文件 转载请保留:http://www.nginx.cn/125.html

十一、文件和目录——文件操作函数(续)

11.3 truncate 和  ftruncate 函数 --- 文件截短函数 11.3.1 函数介绍 改变文件大小的函数 相关函数 open 1 #include <unistd.h> 2 int truncate(const char * path, off_t length); 3 int ftruncate(int fd, off_t length); 函数说明 在文件尾端处截去一些数据以缩短文件 将一个文件的长度截短为 0 是一个特例,用 O_TRUNC 标志可以做到这一点 如果该