Как определить, какой файл был создан первым? - PullRequest
0 голосов
/ 14 июля 2011

В системе Linux (передо мной Ubuntu 10.04, но это не должно иметь значения), как я могу определить, какой из двух файлов, созданных за одну секунду, был создан первым?Процесс, которым я управляю, не создает ни самого себя;во всех других отношениях ctime, я думаю, сработает, но разрешение в 1 секунду - это проблема.

Для фона я пытаюсь надежно определить, относится ли потенциально устаревший pid-файл к текущему процессу.с этим пид.Если есть лучший способ сделать это, я весь в ушах.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

На самом деле, в современных Unices с современными файловыми системами время модификации файла хранится во временном интервале.Детали:

Стандарт говорит, что stat выглядит так WRT раз:

struct timespec st_atim Last data access timestamp. 
struct timespec st_mtim Last data modification timestamp. 
struct timespec st_ctim Last file status change timestamp.

И timespec

time_t  tv_sec    seconds
long    tv_nsec   nanoseconds

Итак, выполняя статистику на моем Linux 2.6.39:

Access: 2011-07-14 15:38:20.016666721 +0300
Modify: 2011-06-10 03:06:12.000000000 +0300
Change: 2011-06-17 11:01:35.416667110 +0300

В заключение, я думаю, у вас достаточно точности, если аппаратное обеспечение его поставляет.

0 голосов
/ 14 июля 2011

Вы можете попробовать ls -rt отсортировать файлы по времени, надеясь, что заголовок файла имеет большую точность, чем отображаемый по умолчанию формат времени списка.Но если файловая система не имеет информации, это невозможно сделать.

Другие варианты?Вы можете добавить идентификатор в файл и всегда увеличивать его, но как только вы попытаетесь загрузить этот идентификатор из файловой системы (при создании нового процесса), у вас возникнут проблемы с блокировкой.

Так как же убедиться, что файл PID не устарел?Ответ: Используйте скрипт daemon .Он запускает процесс в фоновом режиме и гарантирует, что файл PID будет удален, как только процесс завершится.

...