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