forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.HUSKY

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 06.11.2021, 21:22
Nil A
Guest
 
Сообщений: n/a
По умолчанию 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
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 03:36. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot