2015-10-20 8 views
0

Я пытаюсь напечатать размер и время файла последнего доступа, последней модификации и последнего изменения. Но я получаю ошибки в терминале. В нем говорится, что тип возвращаемого значения из buf.st_size имеет тип «__off_t» и возвращаемое значение из buf.st_atime, buf.st_mtime, & buf.st_ctime имеет тип «__time_t».Печать размера и времени файла в C

#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"); 
} 
+3

Off-тему здесь, так как «отладить мой код» вопрос (без интуиции, что может быть неправильно). BTW сделал ли вы RTFM [stat (2)] (http://man7.org/linux/man-pages/man2/stat.2.html) внимательно? Также скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -Wextra -g') и используйте отладчик (' gdb'). Используйте также команду [stat (1)] (http://man7.org/linux/man-pages/man1/stat.1.html) –

+0

Вы также не проверяете, что вызов 'stat()' преуспел. –

+0

@ AndrewHenle Что вы имеете в виду, проверяя, был ли вызов stat() успешным? – Raghad

ответ

1

time_t только целое число, представляющее секунды после эпохи 1 января 1970. В современных системах это 64-разрядное целое число и в зависимости от вашей системы, вы должны быть в состоянии напечатать его с %lu или %llu. Вы также можете привести параметр в соответствии с форматом:

printf("Last access: %lu.\n", (long unsigned) buf.st_atime); 

Если вы хотите строковое представление, вы можете использовать strftime. Эта функция принимает формат – "%c" для «предпочтительного» формата, если вы ленивы – заполняющий буфер символов и struct tm, который содержит время и дату, разбитые на человеко-читаемые данные.

Чтобы получить struct tm с отметки time_t, используйте localtime. Для этих функций обязательно укажите <time.h>.

Например:

char str[32]; 

strftime(str, sizeof(str), "%c", localtime(&buf.st_atime)); 
printf("Last access: %s.\n", str); 

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

  • Нет связанных вопросов^_^