lock the file in linux

Hi,
I want to lock the file in linux and the file cannot be edit or modify by other .I know in perl, there is function flock , but it is not worked.
The file can be modifed and edit even if it is locked by flock .
Any other way to lock the file and so other cannot edit or modifed it ????
Any similar fucntion in perl ????

thank

Well when you say file is locked .. all it means is, its is locked for those who care for it,

e.g.
If I want to lock a file x, ill create file x.lock in particular location.
now when you come you first check if x.lock exists, if it does not, you create it. indicating that you have locked file x.

so no one can 'lock' file x as long as x.lock is existing.

you need to take care about 'unlocking' the file.

Hi,
can you describe more detailed ???
I use "flock" in perl to lock the file but I cannot find XXX.lck file
what is your method ?? any thing suggest in PERL ???

Perl's flock() does give you a lock on a file, if you use LOCK_EX, and all other processes use that mechanism too. If they don't, you're out of luck. If you don't want the file to be modified, change the permissions to read-only for everyone else (but root will still be able to modify it).

Hi,
I use flock with exclusive lock , but I can still edit and modified the file .
I do not want to use chmod or chattr to immune the file ...
Any other way in perl can do this ?????

from perldoc -f flock

Two potentially non-obvious but traditional flock semantics are that it waits indefinitely until the lock is granted, and that its locks merely advisory. Such discretionary locks are more flexible, but offer fewer guarantees. This means that programs that do not also use flock may modify files locked with flock.

So you need to use same locking mechanism in all processes interested in locking the file, in order to ensure that files gets locked properly.

All file locking algo works like this:

While (file_is_locked()) {
wait;
}
lock_the file();

Do_somthing_on_file;
unlock_the_file();

Its up to you to decide, what you mean when you say 'lock_the file();' I suggest to create lock file, so 'file_is_locked()' will mean checking existance of .lock file.

HTH;

---------- Post updated at 05:45 PM ---------- Previous update was at 05:44 PM ----------

That wont help if, all processes interested in having lock on perticular file, runs with same user id.

so, If I just want to use a process (perl) to hold/lock the file and do not allow other to edit or modify , any method to do it in perl ???
Please suggest .....

So, Any idea how to make "file busy" by perl in linux ???
Any suggestion ???