1BEGIN { 2 chdir 't' if -d 't'; 3 4 @INC = '../lib'; 5 6 require Config; import Config; 7 8 my $reason; 9 10 if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) { 11 $reason = 'IPC::SysV was not built'; 12 } elsif ($Config{'d_sem'} ne 'define') { 13 $reason = '$Config{d_sem} undefined'; 14 } elsif ($Config{'d_msg'} ne 'define') { 15 $reason = '$Config{d_msg} undefined'; 16 } 17 if ($reason) { 18 print "1..0 # Skip: $reason\n"; 19 exit 0; 20 } 21} 22 23use IPC::SysV qw( 24 SETALL 25 IPC_PRIVATE 26 IPC_CREAT 27 IPC_RMID 28 IPC_NOWAIT 29 IPC_STAT 30 S_IRWXU 31 S_IRWXG 32 S_IRWXO 33); 34use IPC::Semaphore; 35 36print "1..10\n"; 37 38my $sem = 39 new IPC::Semaphore(IPC_PRIVATE, 10, S_IRWXU | S_IRWXG | S_IRWXO | IPC_CREAT) 40 || die "semget: ",$!+0," $!\n"; 41 42print "ok 1\n"; 43 44my $st = $sem->stat || print "not "; 45print "ok 2\n"; 46 47$sem->setall( (0) x 10) || print "not "; 48print "ok 3\n"; 49 50my @sem = $sem->getall; 51print "not " unless join("",@sem) eq "0000000000"; 52print "ok 4\n"; 53 54$sem[2] = 1; 55$sem->setall( @sem ) || print "not "; 56print "ok 5\n"; 57 58@sem = $sem->getall; 59print "not " unless join("",@sem) eq "0010000000"; 60print "ok 6\n"; 61 62my $ncnt = $sem->getncnt(0); 63print "not " if $sem->getncnt(0) || !defined($ncnt); 64print "ok 7\n"; 65 66$sem->op(2,-1,IPC_NOWAIT) || print "not "; 67print "ok 8\n"; 68 69print "not " if $sem->getncnt(0); 70print "ok 9\n"; 71 72END { 73 (defined $sem && $sem->remove) || print "not "; 74 print "ok 10\n"; 75} 76