Любая конкретная причина, по которой localtime выдает предупреждение с помощью struct tm* & stat* в linux?

У меня есть этот простой код (часть проекта):

void displayFileProperties(struct stat* file,char*  outputProperties , char * path)
{

    struct tm* time;

        // code 
        // code
        time = localtime(&file->st_mtim);


        // code 

}

Где затмение продолжает бросать мне предупреждение:

passing argument 1 of ‘localtime’ from incompatible pointer type [enabled by default]   main.c  /ex4    line 340    C/C++ Problem

Любая идея, как это исправить? Благодарность


person JAN    schedule 26.07.2012    source источник


Ответы (4)


st_mtim — это временная спецификация структуры (секунды и наносекунды). Вы хотите st_mtime.

person Alan Curry    schedule 26.07.2012
comment
Алан, обратите внимание, что на этот раз Eclipse показывает ошибку (после добавления e): `Поле 'st_mtime' не может быть разрешено main.c/ex4 строка 342 Semantic Error` - person JAN; 27.07.2012
comment
Затмение неправильно :-) Серьезно. Разбивайте его по голове, пока он не начнет уважать ваш авторитет. Или добавьте тег eclipse к этому вопросу, или задайте отдельный дополнительный вопрос... сейчас это просто отчет об ошибке Eclipse. - person Alan Curry; 27.07.2012
comment
Я бы хотел :) но он не скомпилируется с этим прекрасным e в конце - person JAN; 27.07.2012
comment
Я не использовал Eclipse, поэтому не знаю, насколько сложно заставить его просто передать этот проклятый файл в gcc. Как насчет того, чтобы сохранить файл и скомпилировать его с помощью gcc самостоятельно? - person Alan Curry; 27.07.2012
comment
Ты так прав! Я makefile-d это терминал с make и он отлично работает. Не знаю, однако, почему затмение кричит ...:) еще раз спасибо - person JAN; 27.07.2012
comment
В качестве обходного пути вы можете просто использовать секундную часть struct timespec: st_mtim.tv_sec, которая должна быть эквивалентна st_mtime (фактически, st_mtime в моей системе — это макрос, который расширяется до st_mtim.tv_sec) - person Alan Curry; 27.07.2012

Вместо этого вы захотите использовать это:

time = localtime(&file->st_mtime);

Обратите внимание на добавленную букву «е» в конце. st_mtim - это спецификация времени, с добавлением "e" это time_t (то, что вам нужно).

person Giel    schedule 26.07.2012
comment
: Спасибо, но я уже пробовал это и получил Description Field 'st_mtime' could not be resolved main.c /ex4 line 340 Semantic Error . Видать тип неизвестен, а я даже заголовки #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> пробовал и все равно не работает - person JAN; 27.07.2012

Полностью измененный ответ:

ПРЕДЛОЖЕНИЯ:

1) Убедитесь, что вы #include эти заголовки:

#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

2) Наведите указатель на "const"

time = localtime((const time_t *)&file->st_mtime);

3) Отпишитесь, что получилось

=====================================================

ДОПОЛНИТЕЛЬНЫЕ ПРЕДЛОЖЕНИЯ:

1) Пожалуйста, прочитайте эти две ссылки:

Начиная с ядра 2.5.48, структура статистики поддерживает разрешение в наносекундах для трех полей отметки времени файла. Glibc предоставляет наносекундный компонент каждого поля, используя имена в форме st_atim.tv_nsec, если определен макрос тестирования функций _BSD_SOURCE или _SVID_SOURCE. Эти поля указаны в POSIX.1-2008, и, начиная с версии 2.12, glibc также предоставляет имена этих полей, если _POSIX_C_SOURCE определен со значением 200809L или выше, или _XOPEN_SOURCE определен со значением 700 или выше. Если ни один из вышеупомянутых макросов не определен, то значения наносекунд отображаются с именами в форме st_atimensec. В файловых системах, не поддерживающих метки времени в долях секунды, поля наносекунд возвращаются со значением 0.

2) Очевидно, что make-файл (который «работает») имеет #define, которого нет в Eclipse, или наоборот.

Вероятно, либо/и _POSIX_C_SOURCE, и/или _XOPEN_SOURCE.

Запустите эту команду, чтобы увидеть, что существует в среде командной строки (makefile?):

gcc -dM -E - < /dev/null | less

3) Пожалуйста, отправьте обратно то, что вы найдете!

person paulsm4    schedule 26.07.2012
comment
localtime возвращает (указатель на) структуру tm. Его аргумент — указатель на time_t. - person Alan Curry; 27.07.2012
comment
@paulsm4: Спасибо, но я пробовал, мой единственный вывод состоит в том, что платформе Eclipse не нравится st_mtime . Однако простой makefile работает как профессионал. - person JAN; 27.07.2012
comment
@ron - это не Eclipse как таковой ... но что-то в среде компиляции Eclipse определенно что-то делает. Я предполагаю, что что-то может быть _POSIX_C_SOURCE: stackoverflow.com/questions/8403963/ - person paulsm4; 27.07.2012

У меня была такая же проблема с Eclipse: не удалось разрешить поле st_mtime (семантическая ошибка)

Исправлена ​​проблема в Eclipse: щелкнув проект правой кнопкой мыши, выберите «Индекс» -> «Обновить все файлы».

person Daniel    schedule 14.10.2013