Sobes.tech
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:

  1. Použitím vlajky O_CREAT | O_EXCL pri otváraní súboru pomocou systémového volania open (POSIX). Vlajka O_EXCL zaruč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);
}
  1. 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ý
}
  1. V C môžete najskôr skontrolovať existenciu súboru pomocou fopen v 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.