|
#1
|
|||
|
|||
src/pktwrite.c: openPktForAppending - race condition
Nil A написал(а) к All в Nov 21 20:03:20 по местному времени:
Нello, All! Race condition в функции openPktForAppending() if(fexist(fileName)) { if((pkt = fopen(fileName, "r+b")) == NULL) ... Правильнее всего сделать цикл, попытаться открыть с OCREATE|O_EXCL, если вернулся EEXIST, то открывать на чтение, если чтение вернуло ENOENT, значит надо снова пытвться O_CREATE|OEXCL, любые другие ошибки походу - выход с ошибкой. Геморой в том, что похожие проверки нужно написать и не для POSIX систем, например, винды с её похожими API. К сожаление fopen() из libc такой гибкостью не обладает. Best Regards, Nil --- GoldED+/LNX 1.1.5 |