我正在尝试打印上次访问,上次修改和上次更改的文件大小和时间。但我在终端遇到错误。它表示来自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");
}
答案 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>