file test for file being open by another process?

Randal L. Schwartz merlyn at stonehenge.com
Wed Jun 12 17:55:16 CDT 2002


>>>>> "mikeraz" == mikeraz  <mikeraz at patch.com> writes:

mikeraz> I'd like to know if another process has a file open on a system.

There's no core (POSIX?) Unix API to know that.  You can crawl through
kernel data structures, ala "ofiles" or "lsof" to figure it out, but
that's non-portable.  Even if the file was open, you could rename it
somewhere else, and it'd still keep writing to the new place.  Or
delete it, and it becomes a nameless file, that is still open.

mikeraz> The file in question is being copied from one system on a network
mikeraz> to another (read:  Windows users are copying files from their local
mikeraz> drive to the Samba share point on my Linux server.) 

mikeraz> When it fully arrives on the second system my process should begin 
mikeraz> to work on it.  

Your two choices are cooperatively, or ad-hoc.

Cooperatively:

have your client write the file into FOO.tmp, then rename when done
to FOO.done.  You don't touch the FOO.tmp files.

Ad hoc:

wait until -A $file > 0.1

Sorry, that's all you get.

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn at stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
TIMTOWTDI



More information about the Pdx-pm-list mailing list