Junior — Middle
По какви начини може да се осигури създаването на файл само в случай, че той липсва?
sobes.tech AI
Отговор от 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("Файлът вече съществува или грешка");
} 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, за да се създаде файл атомарно само ако не съществува.