用C打印文件大小和时间

时间:2015-10-20 10:14:16

标签: c file printf file-structure

我正在尝试打印上次访问,上次修改和上次更改的文件大小和时间。但我在终端遇到错误。它表示来自buf.st_size的返回值的类型是'__off_t'类型,而返回的值来自buf.st_atime,buf.st_mtime,& buf.st_ctime的类型为'__time_t'。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{

  struct stat buf;

  if(argc==2){
    stat(argv[1],&buf);

    if(S_ISDIR(buf.st_mode))
      printf("It's a directoy.\n");

    else if(S_ISREG(buf.st_mode))
      printf("It's a file.\n");

    else
      printf("It's other.\n");

   printf("User ID: %d.\nGroup ID: %d.\n",buf.st_uid,buf.st_gid);

   printf("Size in bytes: %zd .\n",buf.st_size);

   printf("Last access: %s.\nLast modification: %s.\nLast change:        %d.\n",buf.st_atime,buf.st_mtime,buf.st_ctime);

   exit(0);
 }
 printf("No argument was given.\n");
}

1 个答案:

答案 0 :(得分:1)

time_t只是一个整数,代表1970年1月1日纪元之后的秒数。在现代系统中它是一个64位整数,根据你的系统,你应该能够用{{ 1}}或%lu。您还可以转换参数以匹配格式:

%llu

如果您想要字符串表示,可以使用strftime。这个函数采用一种格式 - 如果你是懒惰的话,使用printf("Last access: %lu.\n", (long unsigned) buf.st_atime); 作为“首选”格式 - 要填充的字符缓冲区和"%c",其中包含分解为人类可读信息的时间和日期。

要从struct tm时间戳获取struct tm,请使用localtime。请确保为这些功能添加time_t

例如:

<time.h>