NA> Правильнее всего сделать цикл, попытаться открыть с O_CREATE|O_EXCL, NA> если вернулся EEXIST, то открывать на чтение, если чтение вернуло NA> ENOENT, значит надо снова пытвться O_CREATE|O_EXCL, любые другие NA> ошибки походу - выход с ошибкой.
NA> Геморой в том, что похожие проверки нужно написать и не для POSIX NA> систем, например, винды с её похожими API. К сожаление fopen() из libc NA> такой гибкостью не обладает.