diff --git a/src/utils/lock_file.cpp b/src/utils/lock_file.cpp new file mode 100644 index 0000000..9f740c0 --- /dev/null +++ b/src/utils/lock_file.cpp @@ -0,0 +1,18 @@ +#include + +#include +#include + +namespace utils::filesystem { +void LockFile::Lock() { + fd_ = open(path_.data(), O_RDWR | O_CREAT, 0666); + while (flock(fd_, LOCK_EX) != 0) { + } +} + +void LockFile::Unlock() { + while (flock(fd_, LOCK_UN) != 0) { + } + close(fd_); +} +} // namespace utils::filesystem diff --git a/src/utils/lock_file.hpp b/src/utils/lock_file.hpp new file mode 100644 index 0000000..d5f99c3 --- /dev/null +++ b/src/utils/lock_file.hpp @@ -0,0 +1,19 @@ +#pragma once +#include + +namespace utils::filesystem { +class LockFile { + public: + LockFile(std::string path) : path_(std::move(path) + ".lock") {} + + void Lock(); + void lock() { Lock(); } + + void Unlock(); + void unlock() { Unlock(); } + + private: + std::string path_; + int fd_ = -1; +}; +} // namespace utils::filesystem