Sobes.tech
Junior — Middle

Файлдын жок болгондо гана аны түзүүнү кандай камсыз кылса болот?

sobes.tech AI

AIден жооп

C/C++ тилдеринде файл жок болсо гана аны түзүү үчүн бир нече жол бар:

  1. POSIX системалык чакыруусу open аркылуу файлды ачканда O_CREAT | O_EXCL белгилерин колдонуу. 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);
}
  1. C++ стандарттык китепканасында <filesystem> колдонуп, файл бар-жогун текшерип, жок болсо түзүү мүмкүн (C++17ден баштап):
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

if (!fs::exists("file.txt")) {
    std::ofstream ofs("file.txt");
    // файл түзүлдү
}
  1. C тилинде биринчи кезекте fopen менен файлдын бар-жогун текшерип, эгер табылбаса, жазуу режиминде ачса болот. Бирок бул ыкма атомдук эмес жана көптөгөн жиптердүү чөйрөлөрдө атаандаштык шарттарды жаратат.

Ошондуктан эң ишенимдүү жол — open функциясын O_CREAT | O_EXCL белгилери менен колдонуп, файлды гана түзүү, эгер ал дагы жок болсо, атомдук түрдө түзүү.