Назад к вопросам
Касперский
Junior — Middle
86
Какими способами можно обеспечить создание файла только в случае его отсутствия?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В C/C++ можно обеспечить создание файла только в случае его отсутствия несколькими способами:
- Использование флага
O_CREAT | O_EXCLпри открытии файла через системный вызовopen(POSIX). ФлагO_EXCLгарантирует, что файл будет создан только если его ещё нет, иначе вызов завершится с ошибкой.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int fd = open("file.txt", O_CREAT | O_EXCL | O_WRONLY, 0644);
if (fd == -1) {
perror("File already exists or error");
} else {
// Файл успешно создан
close(fd);
}
- В стандартной библиотеке C++ можно проверить существование файла с помощью
<filesystem>(начиная с C++17) и создать файл, если его нет:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// файл создан
}
- В C можно сначала проверить существование файла через
fopenс режимом чтения, а если файл не найден, открыть его для записи. Но такой подход не атомарен и может привести к состоянию гонки в многопоточной среде.
Таким образом, наиболее надежный способ — использовать open с флагами O_CREAT | O_EXCL для атомарного создания файла только если он отсутствует.