Loading...
Searching...
No Matches
casacore::FileLocker Class Reference
casa package (libcasa_casa) » IO_module

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

## Detailed Description

Class to handle file locking.

### Intended use:

Public interface

### Review Status

Reviewed By:
  UNKNOWN
Date Reviewed:
  before2004/08/25
Test programs:
  tLockFile

### Prerequisite

- man page of fcntl

### Synopsis

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:

- Wait until the lock request is granted; i.e. until the processes holding a lock on the file release their lock.
- Do several attempts; between each attempt it sleeps 1 second. Note that nattempts=1 means it returns immediately when the lock request could not be granted.

### Example

int fd = open ("file.name");
FileLocker lock(fd);
if (lock.acquire()) {
... do something with the file..\.
lock.release();
}else{
cout << lock.lastMessage() << endl;
}
casacore::FileLocker::fd
int fd() const
Get the fd in use.
Definition FileLocker.h:156
casacore::FileLocker::FileLocker
FileLocker()
Default constructor creates an invalid fd.

### Motivation

Make it possible to lock files in a standard way.

Definition at line 89 of file FileLocker.h.

## Member Enumeration Documentation

## LockType

enum casacore::FileLocker::LockType

Define the possible lock types.

Enumerator
Read | Acquire a read lock.
Write | Acquire a write lock.

Definition at line 93 of file FileLocker.h.

## Constructor & Destructor Documentation

## FileLocker() [1/2]

casacore::FileLocker::FileLocker | ( |  | ) |

Default constructor creates an invalid fd.

## FileLocker() [2/2]

casacore::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.

References fd(), and casacore::length().

## ~FileLocker()

casacore::FileLocker::~FileLocker | ( |  | ) |

## Member Function Documentation

## acquire()

Bool casacore::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.

References Write.

## canLock() [1/2]

Bool casacore::FileLocker::canLock | ( | LockType | = Write | ) |

Test if the file can be locked for read or write.

Optionally the PID of the process holding the lock is returned.

References Write.

## canLock() [2/2]

Bool casacore::FileLocker::canLock | ( | uInt & | pid,
|  | LockType | = Write )

References Write.

## fd()

int casacore::FileLocker::fd | ( |  | ) | const

inline

Get the fd in use.

Definition at line 156 of file FileLocker.h.

References itsFD.

Referenced by FileLocker().

## hasLock()

Bool casacore::FileLocker::hasLock | ( | LockType | type = Write | ) | const

inline

Test if the process has a lock for read or write on the file.

Definition at line 152 of file FileLocker.h.

References itsReadLocked, itsWriteLocked, and Write.

## lastError()

int casacore::FileLocker::lastError | ( |  | ) | const

inline

Get the last error.

Definition at line 160 of file FileLocker.h.

References itsError.

## lastMessage()

String casacore::FileLocker::lastMessage | ( |  | ) | const

Get the message belonging to the last error.

## release()

Bool casacore::FileLocker::release | ( |  | ) |

Release a lock.

The return status indicates if an error occurred.

## Member Data Documentation

## itsError

int casacore::FileLocker::itsError

private

Definition at line 143 of file FileLocker.h.

Referenced by lastError().

## itsFD

int casacore::FileLocker::itsFD

private

Definition at line 142 of file FileLocker.h.

Referenced by fd().

## itsLength

int casacore::FileLocker::itsLength

private

Definition at line 145 of file FileLocker.h.

## itsMsgShown

Bool casacore::FileLocker::itsMsgShown

private

Definition at line 146 of file FileLocker.h.

## itsReadLocked

Bool casacore::FileLocker::itsReadLocked

private

temporary for SUSE 6.1

Definition at line 147 of file FileLocker.h.

Referenced by hasLock().

## itsStart

int casacore::FileLocker::itsStart

private

Definition at line 144 of file FileLocker.h.

## itsWriteLocked

Bool casacore::FileLocker::itsWriteLocked

private

Definition at line 148 of file FileLocker.h.

Referenced by hasLock().

The documentation for this class was generated from the following file:

- casa/IO/FileLocker.h