Junior — Middle
Akými spôsobmi je možné zabezpečiť vytvorenie súboru iba v prípade jeho neexistencie?
sobes.tech AI
Odpoveď od AI
V jazyku C/C++ je možné zabezpečiť vytvorenie súboru iba v prípade, že ešte neexistuje, niekoľkými spôsobmi:
- Použitím vlajky
O_CREAT | O_EXCLpri otváraní súboru pomocou systémového volaniaopen(POSIX). VlajkaO_EXCLzaručuje, že súbor bude vytvorený iba ak ešte neexistuje, inak volanie skončí chybou.
#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("Súbor už existuje alebo chyba");
} else {
// Súbor bol úspešne vytvorený
close(fd);
}
- V štandardnej knižnici C++ môžete skontrolovať existenciu súboru pomocou
<filesystem>(od C++17) a vytvoriť súbor, ak neexistuje:
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
if (!fs::exists("file.txt")) {
std::ofstream ofs("file.txt");
// súbor vytvorený
}
- V C môžete najskôr skontrolovať existenciu súboru pomocou
fopenv režime na čítanie, a ak súbor nenájdete, otvorte ho na zápis. Tento prístup však nie je atomický a môže viesť ku konkurenčným podmienkam v prostredí s viacerými vláknami.
Najspoľahlivejším spôsobom je použiť open s flagami O_CREAT | O_EXCL, aby ste vytvorili súbor atomicky iba v prípade, že neexistuje.