文件时间(Unix环境高级编程)

每个文件维护了三个时间字段,它们的目的如下表所示:

Field Description Example ls(1) option
st_atime last-access time of file data read -u
st_mtime last-modification time of file data write default
st_ctime last-change time of i-node status chmod, chown -c

第118页的示例代码:

$ cat 4_21.c 
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.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) {
      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);
}

运行结果为:

$ gcc -g -o 4_21 4_21.c

# 查看最后一次修改的时间
$ ls -l foo bar
-rw------- 1 richard richard 0 Dec  4  2014 bar
-rw------- 1 richard richard 0 Dec  4  2014 foo

# 查看最后一次访问的时间
$ ls -lu foo bar 
-rw------- 1 richard richard 0 Mar 20 20:41 bar
-rw------- 1 richard richard 0 Mar 20 20:41 foo

# 打印当前时间
$ date
Sat Aug 29 13:13:26 CST 2015

# 执行程序
$ ./4_21 foo bar

# 检查结果
$ ls -l foo bar 
-rw------- 1 richard richard 0 Dec  4  2014 bar
-rw------- 1 richard richard 0 Dec  4  2014 foo

# 检查最后访问时间
$ ls -lu foo bar 
-rw------- 1 richard richard 0 Mar 20 20:41 bar
-rw------- 1 richard richard 0 Mar 20 20:41 foo

# 检查最后状态改变时间
$ ls -lc foo bar 
-rw------- 1 richard richard 0 Aug 29 13:13 bar
-rw------- 1 richard richard 0 Aug 29 13:13 foo
时间: 2024-10-01 02:45:58

文件时间(Unix环境高级编程)的相关文章

apue.h头文件(UNIX环境高级编程)

apue.h是作者自己写的一个文件,包含了常用的头文件,系统不自带.其中包含了常用的头文件,以及出错处理函数的定义.使用起来确实很方便. apue.h内容如下:   #ifndef _APUE_H #define _APUE_H #define _XOPEN_SOURCE   600  /* Single UNIX Specification, Version 3 */ #include <sys/types.h>       /* some systems still require thi

《Unix环境高级编程》读书笔记 第3章-文件I/O

1. 引言 Unix系统的大多数文件I/O只需用到5个函数:open.read.write.lseek以及close 本章描述的函数经常被称为不带缓冲的I/O.术语不带缓冲指的是在用户的进程中对其不会自动缓冲,每个read和write都调用内核中的一个系统调用.但是,所有磁盘I/O都要经过内核的块缓存区(也称为内核的缓冲区高速缓存).唯一例外的是对原始磁盘设备的I/O. 2. 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数,其变化范围是0~OPEN_MAX

UNIX环境高级编程笔记之文件I/O

一.看图说话 一图胜过千言,看图! 二.唠一唠 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情.其实大概三年前,那会大三,我就买了这本书,也看过一些,但好像没有留下什么印象,今天再看,依然觉得像新的一样.很大的原因我想是一直以来都在用windows(用windows做开发为什么学不到真正的技术,我想大家都懂的),当然知识结构不完整,学习能力这些就不说了.所以,对于那些致力于想在Linux下做开发的人来说,

unix环境高级编程(第三版)中apue.h文件的配置问题

最近刚开始学习unix环境高级编程(第三版),其中有个作者自己写的apue.h文件,在这归总下相应的配置方法,希望对有需要的朋友们有所帮助 首先http://www.apuebook.com/code3e.html 上去下载相应的压缩包,注意自己书的版本. 下载完成之后,鉴于大多数朋友学习linux都是基于虚拟机的,所以顺便附上虚拟机与本地主机传输文件的方式 首先下载SSH Secure Shell 这个工具,然后直接点击quick connect, 弹出如下界面,输入虚拟机的ip地址,和登录用

《UNIX环境高级编程》读书笔记 —— 文件 I/O

一.打开或创建一个文件 #include <fcntl.h> int open(const char *pathname, int oflag, .../*mode_t mode*/); 返回值:若成功则返回文件描述符,若出错则返回-1 oflag选项: O_RDONLY O_WRONLY O_RDWR 以上三个常量中必须指定一个,且只能指定一个. 以下常量都是可选的: O_APPED     每次写时追加到文件尾 O_CREAT     若文件不存在,则创建 O_EXCL      若同时指

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

Linux - Unix环境高级编程(第三版) 代码编译

Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebook.com/code3e.html 2. 安装依赖库:sudo apt-get install libbsd-dev  3. 进入下载目录make 4. 复制头文件和动态链接库 sudo cp ./include/apue.h /usr/include/ sudo cp ./lib/libapue

《Unix环境高级编程》读书笔记 第7章-进程环境

1. main函数 int main( int argc, char *argv[] ); argc是命令行参数的数目,包括程序名在内 argv是指向参数的各个指针所构成的数组,即指针数组 当内核执行C程序时(使用exec函数),在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接器设置的,而连接器则是由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后按上述方式调用main函数做好安排. 2. 进程终止 有8种方式使进程终止,其中5种

unix环境高级编程基础知识之第二篇(3)

看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位,它可以得到和改变打开文件的属性(只读,只写等等,注意后面和stat区别),下面记录了自己在学习的时候一些命令及概念,供学习使用: ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的所有文件及目录的名字. 1)ls –a 显示当前目录中的所有文件,包含隐藏文件. 2