in reply to ClearCase Programming

I used two scripts to try and simulate your problem:
# write.pl my $pid = fork; if($pid == 0) { sleep 5; system('echo "hello world" > foo.txt'); }
which creates the child worker process (I assumed you have no control over this process) and
# copy.pl my $test = system('perl', 'write.pl'); my $file1 = 'foo.txt'; my $status = system("cp $file1 file2");
Then running copy.pl produced:
$ perl -w copy.pl cp: cannot stat `foo.txt': No such file or directory
Then I changed copy.pl to copy2.pl
# copy2.pl use strict; my $test = system('perl', 'write.pl'); my $file1 = 'foo.txt'; while(1) { last if -e $file1 && ! qx/lsof $file1/; } my $status = system("cp $file1 file2");
which successfully copies the file. This method waits for the file to be created and waits until no other processes are using it before executing the copy command (and it assumes you have lsof available).