------- start of cut text -------------- A dynamically loadable library should be provided with the Operating System for the purpose of locking devices. The library should offer the following API: pid_t dev_testlock ( const char * devname); pid_t dev_lock ( const char * devname); pid_t dev_relock ( const char * devname, pid_t old_pid); pid_t dev_unlock ( const char * devname, pid_t pid); where devname is the full pathname of the device to be locked, old_pid and pid are the ID of the process currently owning the lock (ZERO disables the check of the owner). Return value for success is ZERO (for dev_testlock means that there is no lock on that device), or the process ID of the owner of the lock. Stale locks are always removed by any call to the library. The details of the underlying implementation are left intentionally undefined to permit the development of more robust locking methods than the one described in previous versions of the FHS. The only implementation requirement is that the library must implement the old FHS method to provide backward-compatibility with older programs. Note that future versions of the LSB may drop this requirement. Here is the old FHS device locking method: The naming convention which must be used is "LCK.." followed by the base name of the device. For example, to lock /dev/cua0 the file "LCK..cua0" would be created. The format used for device lock files must be the HDB UUCP lock file format. The HDB format is to store the process identifier (PID) as a ten byte ASCII decimal number, with a trailing newline. For example, if process 1230 holds a lock file, it would contain the eleven characters: space, space, space, space, space, space, one, two, three, zero, and newline. Then, anything wishing to use /dev/cua0 can read the lock file and act accordingly (all locks in /var/lock should be world-readable). A reference implementation of the library can be found at URL: ... ------- end ----------------------------