- 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
广告