TOCTOU
Alexey Khromov написал(а) к Nil A в Jun 23 07:12:32 по местному времени:
Здраствуйте, Nil!
05 июн 23 03:55, Nil A -> Alexey Khromov:
NA> Это называется happy path, но бывают в жизни огорчения, когда без
NA> хлеба ешь печения.
Согласен. Отладка по-сути идет до сих пор)
Вот кусочек лога:
----- 04.06.2023 23:30:02 -----
FLAG_TOSS TOSS LINK .
----- 05.06.2023 00:06:02 -----
SEM_ECНO .
----- 05.06.2023 00:06:02 -----
FLAG_ECНO SCAN .
----- 05.06.2023 00:10:01 -----
FLAGTOSS TOSS LINK FLAGECНO SCAN .
----- 05.06.2023 00:22:01 -----
FLAG_POLL POLL .
----- 05.06.2023 00:36:01 -----
FLAG_TOSS TOSS LINK .
----- 05.06.2023 00:56:01 -----
FLAG_TOSS TOSS LINK .
----- 05.06.2023 00:58:01 -----
FLAG_TOSS TOSS LINK .
----- 05.06.2023 02:12:01 -----
NA> Обожди с FSM своим пока. Вот ты хочешь позвонить на линк / открыть
NA> базу / запустит тоссинг / .. Ты обнаруживаешь флаг, т.е. файл на
NA> файловой системе. Ты утверждаешь, что ты переименовываешь файл (скорее
NA> всего, потому что слышал, что это атомарная операция для ОС), и дальше
NA> делешь sleep(N), и проверяешь, может там кто-то ещё создал файл флаг?
Зачем же спать) Переименовал - обработал - удалил переименованное - проверил снова, что новых флагов нет (в процессе обработки могут возникнуть новые как в результате обработки, так и внешних событий). Точка ставится, когда в каталоге флагов самих флагов не осталось)
NA> понимание. Короче, это уже решённая задача.
Для программиста возможно, если он хоть чуточку воспринимает систему всю, от возможных NMI до соседнего краша процесса и отсвопленных участков кучи.
NA> Ещё один, жертва переводных книг. В su.c_cpp только что я спойлернул
Увы, до переводных книг не дошел. Просто пользуюсь Archlinux и смотрю за чейнджлогом. иногда.
А su.c_cpp подпышусь )
NA> эту тему. Якобы, мьютексы - это англицизм, надо говорить семафоры. Но
NA> семафоры - это такая штука, со счётчиком увнутри, а мьютекс - он
NA> просто залочка.
И товарищ Линус приравнял одно к другому. Точнее рекомендовал использовать семафоры с единицей, чтобы выкинуть лишнюю сущность.
AK>> Флаги просто более-менее универсальны и меньше зависят от
AK>> особенностей ОС.
NA> Ну.. в юниксах я во флаг-файл положу pid процесса, ещё и атомарно
NA> переименую такой файл. А что в венде класть туда, я не знаю, надо
В никсах touch flag создает файл нулевой длины, чего вполне хватает как флага.
pid в run-файлах нужен, чтобы кильнуть аккуратно то, что потребно без поиска по логам. СистемДы их сама для себя обычно и создает. В SystemV скриптами было тоже самое хорошим тоном. Upstart я пропустил мимо.
NA> вин32апи куприть.
В виндах то же самое
NA> будут уже требования регулятора.
152й ФЗ уже в печенках, не напоминай)
NA> Стандарт он такой, он должен очень обстрактно описать, чтобы, например
NA> C++ завёлся и на писюке, и на микроконтроллере, если он утверждает,
NA> что поддерживает стандарт.
К чему и велось. Стандарты они такие. В конкретной реализации можно подставить под некоторые особенности окружения проверки/костыли)
Alexey Khromov
--- GoldED+/LNX 1.1.5-b20230304
|