Как получить время модификации файла в c под несколькими ОС? - PullRequest
3 голосов
/ 18 февраля 2012

Я пытаюсь написать переносимую функцию в c, которая сравнивает время последнего изменения 2 файлов. Файлы являются крошечными и записываются один за другим, поэтому мне нужна более детальная детализация, чем 1 секунда (миллисекунды).
Кажется, есть множество функций времени / даты ...

Ответы [ 3 ]

3 голосов
/ 18 февраля 2012

Стандарт C не имеет никаких функций для этого, но в спецификации Posix есть. В выпуске 2008 года даже есть метки времени в секунду. #define _POSIX_C_SOURCE 200809L

Следующий код должен дать вам представление о том, как его использовать.

#define _POSIX_C_SOURCE 200809L
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include <stdio.h> // for printf
#include <stdlib.h> // for EXIT_FAILURE

int main(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {
        struct stat st = {0};
        int ret = lstat(argv[i], &st);
        if (ret == -1) {
            perror("lstat");
            return EXIT_FAILURE;
        }

        printf("%s: mtime sec=%lld nsec=%lld\n", argv[i],
               (long long) st.st_mtim.tv_sec, 
               (long long) st.st_mtim.tv_nsec);
    }

    return 0;
}
3 голосов
/ 18 февраля 2012

Вам следует обратиться к функции stat().Он доступен для * nix и для windows .

. Они оба вернут вам структуру, содержащую имя поля st_msize.Это лучшие функции, которые я когда-либо слышал для получения информации такого рода из операционной системы.

Поскольку вам нужна мобильность, будьте осторожны, чтобы позаботиться о различных типах, доступных в Windows.В * NIX это классическая структура time_t.Если вы включаете конкретный вызов, вы можете получить нано секунды mtime: это было определено в POSIX.1-2008, в соответствии с man-страницей.

Вы также можете взглянуть на , как вы можете справиться с64/32 бит time_t

1 голос
/ 18 февраля 2012

Для POSIX UNIX stat() является переносимым и дает struct stat st_mtime, что является временем модификации в секундах эпохи.Статистика Windows возвращает значения времени Windows и имеет время создания, а не st_ctime.Для не-POSIX UNIX-реализаций, Windows и других ОС не существует переносимого понятия времени модификации файла.Так что, в зависимости от вашего представления о портативном устройстве, вся эта концепция может или не работать на вас.

...