- Perl基础
- Perl - 主页
- Perl - 介绍
- Perl - 环境
- Perl - 语法概览
- Perl - 数据类型
- Perl - 变量
- Perl - 标量
- Perl - 数组
- Perl - 散列
- Perl - IF...ELSE
- Perl - 循环
- Perl - 操作符
- Perl - 日期与时间
- Perl - 子例程
- Perl - 引用
- Perl - 格式
- Perl - 文件I/O
- Perl - 目录
- Perl - 错误处理
- Perl - 特殊变量
- Perl - 编码标准
- Perl - 正则表达式
- Perl - 发送电子邮件
- Perl高级
- Perl - 套接字编程
- Perl - 面向对象
- Perl - 数据库访问
- Perl - CGI编程
- Perl - 包和模块
- Perl - 进程管理
- Perl - 嵌入式文档
- Perl - 函数引用
- Perl有用的资源
- Perl - 问题和答案
- Perl - 快速指南
- Perl - 有用资源
- Perl - 讨论
Perl semget函数
描述
此函数使用系统函数semget()返回与KEY关联的信号量ID,即找到与KEY关联的信号量。
语法
以下是此函数的简单语法 -
semget KEY, NSEMS, FLAGS
返回值
此函数在失败时返回未定义,在成功时返回0但为true。
示例
以下是显示其基本用法,创建信号量并递增其值的示例代码 -
#!/usr/bin/perl -w
# Assume this file name is left.pl
use IPC::SysV;
#use these next two lines if the previous use fails.
eval 'sub IPC_CREAT {0001000}' unless defined &IPC_CREAT;
eval 'sub IPC_EXCL {0002000}' unless defined &IPC_EXCL;
eval 'sub IPC_RMID {0}' unless defined &IPC_RMID;
$key = 1066;
$| = 1;
$num = 0;
$flag = 0;
# Create the semaphor
$id = semget ( $key, 1, &IPC_EXCL|&IPC_CREAT|0777 ) or
die "Can't semget: $!";
foreach( 1..5) {
$op = 0;
$operation = pack( "s*", $num, $op, $flags );
semop( $id, $operation ) or die "Can't semop: $! ";
print "Left....\n";
sleep 1;
$op = 2;
$operation = pack( "s*", $num, $op, $flags );
# add 2 to the semaphore ( now 2 )
semop( $id, $operation ) or die "Can't semop $! ";
}
semctl ( $id, 0, &IPC_RMID, 0 );
使用$ left.pl和amp;在后台运行以上程序,并编写以下另一个程序。在这里,Left将信号量设置为2,Right打印Right并将信号量重置为0。这将持续到Left完成其循环,之后它将使用semctl()销毁信号量
#!/usr/bin/perl -w
# Assume this file name is right.pl
$key = 1066;
$| = 1;
$num = 0;
$flags = 0;
# Identify the semaphore created by left.
$id = semget( $key, 1, 0 ) or die ("Can't semgt : $!" );
foreach( 1..5) {
$op = -1;
$operation = pack( "s*", $num, $op, $flags );
# Add -1 to the semaphore (now 1)
semop( $id, $operation ) or die " Can't semop $!";
print "Right....\n";
sleep 1;
$operation = pack( "s*", $num, $op, $flags );
# Add -1 to the semaphore (now 0)
semop( $id, $operation ) or die "Can't semop $! ";
}
执行上述代码时,会产生以下结果。现在运行right.pl并得到以下结果 -
Right.... Left.... Right.... Left.... Right.... Left.... Right.... Left.... Right.... Left....
perl_function_references.htm
广告