Hello List,

I am new to perl.
I run following sample script, and see strace output.
I have 2 questions.

===========
#!/usr/bin/perl

use Fcntl qw/:DEFAULT :flock :seek F_GETFL/;

sysopen( LOCK_FILE, "./sample.txt", O_WRONLY | O_CREAT);

$PackedPattern   = "ssllll";

$LockInfo = pack( $PackedPattern, F_WRLCK, SEEK_SET, 0, 0, $$ );
$ReturnValue = fcntl( LOCK_FILE, F_SETLK, $LockInfo ) || -1;

===========
Strace output.

open("./sample.txt", O_WRONLY|O_CREAT|O_LARGEFILE, 0666) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfba5928) = -1 ENOTTY
(Inappropriate ioctl for device)
_llseek(3, 0, [0], SEEK_CUR)            = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fcntl64(3, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=0,
len=19946}, 0x9b30b50) = 0
close(3)                                = 0
exit_group(0)                           = ?
Process 19946 detached

===========
Questions

(1)  I set F_SETLK in the script, but the perl returns F_SETLK64.
     What makes it to do so?
    My test environment is RHEL5 (ia32)  perl-5.8.8

(2)  I see len=19946 in strace output.
     But I expect len should be "length of the file(sample.txt)".
     So, it should be 0 byte.  (st_size=0)
     I know the 19946 is the PID of the script, and it is because I set "$$"
     so that's why I see the PID in the strace output.
     But my question is , why the PID value (19946) was put into the len field.

I am appreciate your advice.

Regards,

Masanari

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to