Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.HUSKY
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.HUSKY с датами от 16 Jul 13 10:00:06 до 04 May 24 09:45:34, всего сообщений: 5323
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 4568 из 5323 ========================================= RU.HUSKY =
От   : Nil A                            2:5015/46          06 Nov 21 20:03:20
Кому : All                                                 06 Nov 21 20:03:20
Тема : src/pktwrite.c: openPktForAppending - race condition
FGHI : area://RU.HUSKY?msgid=2:5015/46+6186b776
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.HUSKY?msgid=2:5020/1042+6186c7dc
Ответ: area://RU.HUSKY?msgid=2:5020/545+61871537
==============================================================================
Hello, All!

Race condition в функции openPktForAppending()

if(fexist(fileName))
{
  if((pkt = fopen(fileName, "r+b")) == NULL)
...

Правильнее всего сделать цикл, попытаться открыть с  O_CREATE|O_EXCL, если вернулся EEXIST, то открывать на чтение, если чтение вернуло ENOENT, значит надо снова пытвться O_CREATE|O_EXCL, любые другие ошибки походу - выход с ошибкой.

Геморой в том, что похожие проверки нужно написать и не для POSIX систем, например, винды с её похожими API.
К сожаление fopen() из libc такой гибкостью не обладает.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
* Origin: Linux 2.6.32-042stab145.3 (2:5015/46)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.040983 секунды