如何在OS X / C中获取文件的上次修改时间?

时间:2016-03-25 04:13:50

标签: c macos date unix

我有以下代码:

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

我该如何解决?如果有任何替代方法来获得所提及的格式时间,请提及。

3 个答案:

答案 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应该具有相同的字段名称定义。