Junior — Middle
Файлдын жок болгондо гана аны түзүүнү кандай камсыз кылса болот?
sobes.tech AI
AIден жооп
C/C++ тилдеринде файл жок болсо гана аны түзүү үчүн бир нече жол бар:
- 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);
}
- 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 белгилери менен колдонуп, файлды гана түзүү, эгер ал дагы жок болсо, атомдук түрдө түзүү.