我有以下代码:
struct stat info;
stat("/Users/john/test.txt", &info);
printf("%s\n", ctime(&info.st_mtimespec));
其中我试图以ls -l
命令中显示的格式获取文件的最后修改时间:
Jan 29 19:39
不幸的是,上面的代码不起作用。我在xcode上收到以下错误消息:
Conflicting types for ctime
我该如何解决?如果有任何替代方法来获得所提及的格式时间,请提及。
答案 0 :(得分:0)
检查struct stat的声明,您会发现st_mtimespec
必须是st_mtime
。
然后,基于此question,我重新安排了您的代码:
struct stat info;
struct tm* tm_info;
char buffer[16];
stat("/Users/john/test.txt", &info);
tm_info = localtime(&info.st_mtime);
strftime(buffer, sizeof(buffer), "%b %d %H:%M", tm_info);
printf("%s\n", buffer);
希望它有所帮助。
答案 1 :(得分:0)
我相信这就是你要找的东西:
#include <sys/stat.h>
#include <time.h>
int main(int argc, char *argv[])
{
struct stat info;
stat("sample.txt", &info);
printf("%.12s\n", 4+ctime(&info.st_mtimespec));
return 0;
}
输出(与ls -l
的时间字段相同):
Feb 4 00:43
(这是我电脑上的一个随机文件)。
答案 2 :(得分:0)
你的代码是否有:
#include <time.h>
此外,ctime()
函数要求传递的参数为time_t
的指针。
这是stat()
函数指向的结构:
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
请注意,这些字段都不是st_mtimespec
也许你的意思是st_mtime
注意:您运行的OS-X和我正在运行Linux,但OS-X应该具有相同的字段名称定义。