Should I replace the following with a 'sysopen' function, like in the locking example ?
open(ORDERFILE, ">$outfile")
Peter
| [reply] [d/l] |
Hi,
Well, that worked, it has now actually created the ascii order file, and gone much further. Now it is stopping/doing nothing here
open(SENDMAIL, '|/usr/sbin/sendmail -oi -t')
or (unlink ($outfile),
diehtml("Can't fork for sendmail: $!\n"));
So, .... it looks like the moral to this story is replace ALL open() with sysopen(), using the parameters and examples as supplied, to fix the locking example.
If I used this code as a template for all the file opens
my $got_lock;
use Fcntl; # to get constants for O_CREAT | O_EXCL | O_RDWR
for ( 0 .. 5 ) {
if ( sysopen(my $fh, "$base_dir/.lock", O_CREAT | O_EXCL | O_RDWR,
+ 0600) ) {
$got_lock = 1;
close $fh;
last;
}
sleep 2;
}
diehtml("Lock error $!\n") unless $got_lock;
.... would I need the 'sleep', and what does the FOR contruct do ? Does it try for 6 times ?? Please pardon my ignorance, I'm _very_ much a novice at Perl. :)
Thanks,
Peter
| [reply] [d/l] [select] |
Interestingly, I use the "NMS" FormMail.pl, which runs SENDMAIL from the same website, and there is not a problem. I see "NMS" uses a pipe
sub newmail {
my ($self, $scriptname, $postmaster, @recipients) = @_;
my $command = $self->{Mailprog};
$command .= qq{ -f "$postmaster"} if $postmaster;
my $pipe;
eval { local $SIG{__DIE__};
$pipe = IO::File->new("| $command");
};
if ($@) {
die $@ unless $@ =~ /Insecure directory/;
delete $ENV{PATH};
$pipe = IO::File->new("| $command");
}
die "Can't open mailprog [$command]\n" unless $pipe;
$self->{Pipe} = $pipe;
$self->output_trace_headers($scriptname);
}
At line 430 in the version of FormMail.pl I have
use IO::File;
.. is IO::File part of the NMS libraries, or a standard Perl one ? (I have no idea if they are called libraries)
Peter
| [reply] [d/l] [select] |