casa
$Rev:20696$
|
Class to handle file locking. More...
#include <FileLocker.h>
Public Types | |
enum | LockType { Read, Write } |
Define the possible lock types. More... | |
Public Member Functions | |
FileLocker () | |
Default constructor creates an invalid fd. | |
FileLocker (int fd, uInt start=0, uInt length=0) | |
Construct the FileLocker object for the given file descriptor. | |
~FileLocker () | |
Bool | acquire (LockType=Write, uInt nattempts=0) |
Acquire a write or read lock. | |
Bool | release () |
Release a lock. | |
Bool | canLock (LockType=Write) |
Test if the file can be locked for read or write. | |
Bool | canLock (uInt &pid, LockType=Write) |
Bool | hasLock (LockType=Write) const |
Test if the process has a lock for read or write on the file. | |
int | fd () const |
Get the fd in use. | |
int | lastError () const |
Get the last error. | |
String | lastMessage () const |
Get the message belonging to the last error. | |
Private Attributes | |
int | itsFD |
int | itsError |
int | itsStart |
int | itsLength |
Bool | itsMsgShown |
Bool | itsReadLocked |
temporary for SUSE 6.1 | |
Bool | itsWriteLocked |
Class to handle file locking.
Public interface
This class handles file locking by means of the fcntl SETLK function. Locking of files on NFS-mounted file systems works correctly as long as the NFS lockd and statd deamons are configured correctly. Otherwise lock requests may be granted incorrectly.
Acquiring a lock can be done for a read or a write lock. Multiple locks on a file can exist as long as they are all read locks. When a write lock is involved, no other lock can exist. It is possible to acquire a lock in 2 ways:
int fd = open ("file.name"); FileLocker lock(fd); if (lock.acquire()) { ... do something with the file ..\. lock.release(); }else{ cout << lock.lastMessage() << endl; }
Make it possible to lock files in a standard way.
Definition at line 91 of file FileLocker.h.
Define the possible lock types.
Definition at line 95 of file FileLocker.h.
Default constructor creates an invalid fd.
casa::FileLocker::FileLocker | ( | int | fd, |
uInt | start = 0 , |
||
uInt | length = 0 |
||
) | [explicit] |
Construct the FileLocker object for the given file descriptor.
This can be used to lock a segment of the given file. The segment is given by start and length. Length=0 means till the end of the file.
Bool casa::FileLocker::acquire | ( | LockType | = Write , |
uInt | nattempts = 0 |
||
) |
Acquire a write or read lock.
nattempts
defines how often it tries to acquire the lock. A zero value indicates an infinite number of times (i.e. wait until the lock is acquired). A positive value means it waits 1 second between each attempt.
Test if the file can be locked for read or write.
Optionally the PID of the process holding the lock is returned.
Referenced by casa::LockFile::canLock().
Bool casa::FileLocker::canLock | ( | uInt & | pid, |
LockType | = Write |
||
) |
int casa::FileLocker::fd | ( | ) | const [inline] |
Bool casa::FileLocker::hasLock | ( | LockType | type = Write | ) | const [inline] |
Test if the process has a lock for read or write on the file.
Definition at line 154 of file FileLocker.h.
References itsReadLocked, itsWriteLocked, and Write.
Referenced by casa::LockFile::hasLock().
int casa::FileLocker::lastError | ( | ) | const [inline] |
Get the last error.
Definition at line 162 of file FileLocker.h.
References itsError.
Referenced by casa::LockFile::lastError().
String casa::FileLocker::lastMessage | ( | ) | const |
Get the message belonging to the last error.
Referenced by casa::LockFile::lastMessage().
Release a lock.
The return status indicates if an error occurred.
int casa::FileLocker::itsError [private] |
Definition at line 145 of file FileLocker.h.
Referenced by lastError().
int casa::FileLocker::itsFD [private] |
Definition at line 144 of file FileLocker.h.
Referenced by fd().
int casa::FileLocker::itsLength [private] |
Definition at line 147 of file FileLocker.h.
Bool casa::FileLocker::itsMsgShown [private] |
Definition at line 148 of file FileLocker.h.
Bool casa::FileLocker::itsReadLocked [private] |
int casa::FileLocker::itsStart [private] |
Definition at line 146 of file FileLocker.h.
Bool casa::FileLocker::itsWriteLocked [private] |
Definition at line 150 of file FileLocker.h.
Referenced by hasLock().