From 4aa3194e005574b01389ca759915fc9a0337d3b1 Mon Sep 17 00:00:00 2001 From: Timofey Date: Wed, 10 Aug 2022 21:49:37 +0300 Subject: [PATCH] Add lock file --- src/utils/lock_file.cpp | 18 ++++++++++++++++++ src/utils/lock_file.hpp | 19 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/utils/lock_file.cpp create mode 100644 src/utils/lock_file.hpp 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