= Сообщение: 4579 из 5323 ========================================= RU.HUSKY = От : Alexey Vissarionov 2:5020/545 07 Nov 21 02:51:20 Кому : Nil A 07 Nov 21 02:51:20 Тема : src/pktwrite.c: openPktForAppending - race condition FGHI : area://RU.HUSKY?msgid=2:5020/545+61871537 На : area://RU.HUSKY?msgid=2:5015/46+6186b776 = Кодировка сообщения определена как: CP866 ================================== ============================================================================== Доброго времени суток, Nil! 06 Nov 2021 20:03:20, ты -> All:
NA> Race condition в функции openPktForAppending() NA> if(fexist(fileName)) NA> { NA> if((pkt = fopen(fileName, "r+b")) == NULL) NA> ... NA> Правильнее всего сделать цикл, попытаться открыть с O_CREATE|O_EXCL, NA> если вернулся EEXIST, то открывать на чтение, если чтение вернуло NA> ENOENT, значит надо снова пытвться O_CREATE|O_EXCL, любые другие NA> ошибки походу - выход с ошибкой. NA> Геморой в том, что похожие проверки нужно написать и не для POSIX NA> систем, например, винды с её похожими API. К сожаление fopen() из NA> libc такой гибкостью не обладает.
man fdopen
Если, конечно, он там действительно нужен.
-- Alexey V. Vissarionov aka Gremlin from Kremlin gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii
... Лотерея (сущ.): форма налога на незнание теории вероятности --- /bin/vi * Origin: ::1 (2:5020/545)