04-10-2010
I hope you are aware that file locking doesn't prevent any process from doing anything - apart from setting a conflicting lock of course - if you didn't explicitly request mandatory locking.
The default is advisory locking, which expects processes to check for and honor locks voluntarily.
Mandatory locking is frowned upon on systems that have it (System V derivatives) and difficult (Linux) or impossible (BSD derivatives) to enable on others.
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
I need to write a function that will work in sh/ksh shell that will test to see if a file has already been opened for writting by another user
has anyone written something like this? (3 Replies)
Discussion started by: johnsonbryce
3 Replies
2. Programming
How should I use errno in a c program and what info does it have .
I am working with directories and files.
So can any one tell me How to access errno?I am using the stat() function on \etc directory and I am alble to access only the half of the directories.I am not able to access other half and... (6 Replies)
Discussion started by: vijlak
6 Replies
3. Programming
From reading various articles on the net, I know stat() is used on files to get things like permissions, sizes etc... As a folder is a special type of file in Unix, I assumed that stat() could work on it as well as any general file.
However, from running my program, perror() reported that the... (3 Replies)
Discussion started by: JamesGoh
3 Replies
4. UNIX and Linux Applications
To begin:
I use Linux
The Problem:
I need bcp functionality for scripts. Perl modules, such as Sybase:xfer, require ctlib which comes with Sybase Open Client. Talking with Sybase sales
reps is an exercise in futility and hate. They know absolutely nothing about their own products and will... (0 Replies)
Discussion started by: Bubnoff
0 Replies
5. Programming
Hello All,
i am porting my application from SunSolaris to Linux (RHEL4).
When i compile my c/c++ code i am getting the following errors.
1. catastrophic error: could not open source file "sys/elf_386.h"
#include <sys/elf_386.h>
2. catastrophic error: could not open source file... (2 Replies)
Discussion started by: tsaravanan
2 Replies
6. Shell Programming and Scripting
Help Please perl Gurus,
I am trying to add ungrouped passengers in a group and I creating a script however it fails on first step only I tried all the options it returns following error.
syntax error at junki line 4, near "open "
Execution of junki aborted due to compilation errors. ... (2 Replies)
Discussion started by: dynamax
2 Replies
7. Shell Programming and Scripting
Die to what all operations, the "Modify" and "Change" values of stat output changes for a file.
I found, during editing a file, Change and Modify alters. When chmod'ing Change alters, while Modify doesnot alters. Is there more situations where these changes? (1 Reply)
Discussion started by: anil510
1 Replies
8. Programming
I am opening a text file using open() system call in O_RDONLY mode.
open() returns me a valid handler but also sets errno to 13 i.e. EACCES(Permission denied).
Question is when open() is returning a valid handler then why does it sets the errno?
Should not errno be set only in case of error... (10 Replies)
Discussion started by: rupeshkp728
10 Replies
9. Shell Programming and Scripting
Hello all, just a quick little part of code i'm writing to check if the file i'm writing too in my automatic process is not being written too manually.
#!/bin/bash
FUSER=$(/sbin/fuser -s /toto.tmp >/dev/null 2>&1)
LSOF=$(/usr/sbin/lsof | grep -q "toto.tmp")
PGREP=$(pgrep -f "toto.tmp" >... (6 Replies)
Discussion started by: maverick72
6 Replies
10. Programming
(Apologies for any typos.)
OSX 10.12.3 AND Windows 10.
This is for the serious Python experts on at least 3.5.x and above...
In script format sys.stdout.write() AND sys.stderr.write() seems to work correctly.
Have I found a serious bug in the interactive sys.stdout.write() AND... (2 Replies)
Discussion started by: wisecracker
2 Replies
FLOCK(3) 1 FLOCK(3)
flock - Portable advisory file locking
SYNOPSIS
bool flock (resource $handle, int $operation, [int &$wouldblock])
DESCRIPTION
flock(3) allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unix derivatives
and even Windows).
On versions of PHP before 5.3.2, the lock is released also by fclose(3) (which is also called automatically when script finished).
PHP supports a portable way of locking complete files in an advisory way (which means all accessing programs have to use the same way of
locking or it will not work). By default, this function will block until the requested lock is acquired; this may be controlled with the
LOCK_NB option documented below.
PARAMETERS
o $handle
-A file system pointer resource that is typically created using fopen(3).
o $operation
-$operation is one of the following:
o LOCK_SH to acquire a shared lock (reader).
o LOCK_EX to acquire an exclusive lock (writer).
o LOCK_UN to release a lock (shared or exclusive).
It is also possible to add LOCK_NB as a bitmask to one of the above operations if you don't want flock(3) to block while locking.
o $wouldblock
- The optional third argument is set to 1 if the lock would block (EWOULDBLOCK errno condition).
RETURN VALUES
Returns TRUE on success or FALSE on failure.
CHANGELOG
+--------------+---------------------------------------------------+
| Version | |
| | |
| | Description |
| | |
+--------------+---------------------------------------------------+
|5.5.22, 5.6.6 | |
| | |
| | Added support for the $wouldblock parameter on |
| | Windows. |
| | |
| 5.3.2 | |
| | |
| | The automatic unlocking when the file's resource |
| | handle is closed was removed. Unlocking now |
| | always has to be done manually. |
| | |
+--------------+---------------------------------------------------+
EXAMPLES
Example #1
flock(3) example
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here
");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
Example #2
flock(3) using the LOCK_NB option
<?php
$fp = fopen('/tmp/lock.txt', 'r+');
/* Activate the LOCK_NB option on an LOCK_EX operation */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo 'Unable to obtain lock';
exit(-1);
}
/* ... */
fclose($fp);
?>
NOTES
Note
flock(3) uses mandatory locking instead of advisory locking on Windows. Mandatory locking is also supported on Linux and System V
based operating systems via the usual mechanism supported by the fcntl() system call: that is, if the file in question has the set-
gid permission bit set and the group execution bit cleared. On Linux, the file system will also need to be mounted with the mand
option for this to work.
Note
Because flock(3) requires a file pointer, you may have to use a special lock file to protect access to a file that you intend to
truncate by opening it in write mode (with a "w" or "w+" argument to fopen(3)).
Note
May only be used on file pointers returned by fopen(3) for local files, or file pointers pointing to userspace streams that imple-
ment the streamWrapper.stream_lock(3) method.
Warning
Assigning another value to $handle argument in subsequent code will release the lock.
Warning
On some operating systems flock(3) is implemented at the process level. When using a multithreaded server API like ISAPI you may
not be able to rely on flock(3) to protect files against other PHP scripts running in parallel threads of the same server instance!
flock(3) is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this
environments (this is especially true for Windows 98 users).
PHP Documentation Group FLOCK(3)