diff options
| -rw-r--r-- | src/stable/file.cpp | 16 | ||||
| -rw-r--r-- | src/stable/file.h | 19 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/stable/file.cpp b/src/stable/file.cpp index 35933f1..a15f394 100644 --- a/src/stable/file.cpp +++ b/src/stable/file.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <errno.h> | 9 | #include <errno.h> |
| 10 | #include <sys/types.h> | 10 | #include <sys/types.h> |
| 11 | #include <sys/stat.h> | 11 | #include <sys/stat.h> |
| 12 | #include <sys/file.h> | ||
| 12 | #include <fcntl.h> | 13 | #include <fcntl.h> |
| 13 | #include <unistd.h> | 14 | #include <unistd.h> |
| 14 | #include <time.h> | 15 | #include <time.h> |
| @@ -200,6 +201,21 @@ void Bu::File::setBlocking( bool bBlocking ) | |||
| 200 | #endif | 201 | #endif |
| 201 | } | 202 | } |
| 202 | 203 | ||
| 204 | bool Bu::File::canLock() const | ||
| 205 | { | ||
| 206 | return true; | ||
| 207 | } | ||
| 208 | |||
| 209 | void Bu::File::lock( bool bExclusive ) | ||
| 210 | { | ||
| 211 | ::flock( fd, bExclusive?LOCK_EX:LOCK_SH ); | ||
| 212 | } | ||
| 213 | |||
| 214 | void Bu::File::unlock() | ||
| 215 | { | ||
| 216 | ::flock( fd, LOCK_UN ); | ||
| 217 | } | ||
| 218 | |||
| 203 | Bu::File Bu::File::tempFile( Bu::String &sName ) | 219 | Bu::File Bu::File::tempFile( Bu::String &sName ) |
| 204 | { | 220 | { |
| 205 | int iXes; | 221 | int iXes; |
diff --git a/src/stable/file.h b/src/stable/file.h index e3497d3..6e05dc7 100644 --- a/src/stable/file.h +++ b/src/stable/file.h | |||
| @@ -56,6 +56,25 @@ namespace Bu | |||
| 56 | virtual bool isBlocking(); | 56 | virtual bool isBlocking(); |
| 57 | virtual void setBlocking( bool bBlocking=true ); | 57 | virtual void setBlocking( bool bBlocking=true ); |
| 58 | 58 | ||
| 59 | /** | ||
| 60 | * Tells you if advisory locks are supported. | ||
| 61 | */ | ||
| 62 | bool canLock() const; | ||
| 63 | |||
| 64 | /** | ||
| 65 | * Acquires an advisory lock on the file. On posix/linux this is done | ||
| 66 | * via flock. | ||
| 67 | *@param bExclusive Set to true to acquire an exclusive lock (i.e. a | ||
| 68 | * write lock). If this is false then a shared lock (i.e. read lock) is | ||
| 69 | * acquired. A file cannot have both an exclusive and shared lock. | ||
| 70 | */ | ||
| 71 | void lock( bool bExclusive=true ); | ||
| 72 | |||
| 73 | /** | ||
| 74 | * Release the held advisory lock. | ||
| 75 | */ | ||
| 76 | void unlock(); | ||
| 77 | |||
| 59 | enum { | 78 | enum { |
| 60 | // Flags | 79 | // Flags |
| 61 | Read = 0x01, ///< Open file for reading | 80 | Read = 0x01, ///< Open file for reading |
