Найти фактические имена файлов с inotify, когда файлы создаются с API Linkat - PullRequest
0 голосов
/ 08 января 2020

Прежде всего, извините за длинный вопрос. Я бы мог sh написать это короче. : (

Представьте, что в каталоге /path/to/dir используется много одновременных созданий файлов с использованием linkat и традиционным методом.

Следующие журналы получены из inotify-tools в Ubuntu.

Program A создает файлы следующим образом и использует linkat API для создания файлов.

01:12 /path/to/dir OPEN #12323432
01:12 /path/to/dir MODIFY #12323432
01:12 /path/to/dir ATTRIB #12323432
01:12 /path/to/dir CREATE my_file_yy.txt
01:12 /path/to/dir CLOSE_WRITE,CLOSE #12323432

События Inotify, поступающие из Program A, имеют странные имена файлов, такие как #12323432, потому что этот файл открыт O_TMPFILE flag и Program A добавил его содержимое. Как только это будет сделано, API linkat используется для создания фактического файла в пользовательском пространстве, который равен my_file_yy.txt.

Program B создает файлы следующим образом и использует традиционный способ создания файлов.

01:13 /run/watson/incoming/ CREATE my_file_xx.txt
01:13 /run/watson/incoming/ OPEN my_file_xx.txt
01:13 /run/watson/incoming/ ATTRIB my_file_xx.txt
01:13 /run/watson/incoming/ CLOSE_WRITE,CLOSE my_file_xx.txt

Это создает файл с именем типа my_file_xx.txt, добавляет его содержимое и закрывает файл. .

Я пишу Program C, который подписывается на события CREATE, CLOSE_WRITE inotify в каталоге /path/to/dir. Размеры файлов, создаваемые Program A и Program B, могут быть любого размера. Большой размер файла занимает больше времени для записи на диск. Поэтому Program C приходится ждать CLOSE_WRITE событий inotify, чтобы убедиться, что запись выполнена, прежде чем начинать обработку файлов.

Программа A, B и C - это независимые программы, которые запускаются одновременно, и мы не можем изменить что-либо в программе A и B.

Как связать фактические имена файлов, такие как my_file_yy.txt, и безымянные имена файлов, такие как #12323432, которые приходят из inotify, когда файлы создаются с linkat ?

Надеялся, я объяснил это ясно.

...