在 C 中打印文件大小和时间

Printing file size and time in C

我正在尝试打印文件的大小和上次访问、上次修改和上次更改的时间。但是我在终端中遇到错误。它说 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");
}

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

printf("Last access: %lu.\n", (long unsigned) buf.st_atime);

如果你想要一个字符串表示,你可以使用strftime。这个函数采用一种格式——如果你懒惰,请使用 "%c" 作为 "preferred" 格式——一个要填充的字符缓冲区和一个 struct tm,其中包含分解为人类可读的时间和日期信息。

要从 time_t 时间戳获取 struct tm,请使用 localtime。请务必为这些函数包含 <time.h>

例如:

char str[32];

strftime(str, sizeof(str), "%c", localtime(&buf.st_atime));
printf("Last access: %s.\n", str);