Я пытаюсь сделать что-то такое, как:Как безопасно записывать файл, если он не существует в C?
FILE* f = fopen_unless_exists("example.txt");
if (f != NULL) {
fprintf(f, "foo bar baz\n");
} else {
// f should be NULL if example.txt already exists
fprintf(stderr, "Error: cannot write to file or file already exists");
}
Я мог бы, конечно, использовать one of the methods mentioned in a related question, но, как указано в комментариях к ответам там, это было бы состояние гонки (в частности, TOCTOU) ,
Каков самый простой способ безопасного создания и записи в файл, , если файл уже существует, не создавая условия гонки?
использовать open() с флагом O_EXCL. O_EXCL Убедитесь, что этот вызов создает файл: если этот флаг указан вместе с O_CREAT, а путь уже существует, то функция open() завершится с ошибкой. – Alon
@Alon 'O_EXCL' не переносится. – Dai