2016-03-25 2 views
-2

У меня есть следующий код:Как получить последнее измененное время файла в OS X/C?

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

Это не работает, потому что? – kaylum

+0

Я получаю сообщение об ошибке «конфликтного типа» для функции ctime. –

+0

Не кажется ли вам, что имеет смысл упомянуть об этом в вопросе? Измените свой вопрос, чтобы указать точное сообщение об ошибке. – kaylum

ответ

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); 

Надеется, что это помогает.

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 

(Это было для случайного файла на моем компьютере).

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 должен иметь те же самые определения имен полей.

Смежные вопросы