又见 IPC::Semaphore 模块。这个函数只有在那些支持 System V IPC 的机器上才能用。
semget KEY, NSEMS, SIZE, FLAGS
这个函数调用 System V IPC 系统调用 semget(2)。在调用之前,你应该 use IPC::SysV 以获取正确的常量定义。该函数返回信号灯 ID,或者如果有错误返回 undef。
又见 IPC::Semaphore 模块。这个函数只能在那些支持 System V IPC 的机器上用。
semop KEY, OPSTRING
这个函数调用 System V IPC 系统调用 semop(2) 以执行信号灯操作,比如发信号和等待等等。在调用之前,你应该使用 use IPC::SysV 以获取正确的常量定义。
OPSTRING 必须是一个 semop 结构的打包的数组。你可以通过说 pack("s*", $semnum, $semop, $semflag)做每一个 semop 结构。信号灯操作的数量是由 OPSTRING 的长度隐含的。该函数在成功的时候返回真,在失败的时候返回假。
下面的代码在等待信号灯 id 为 $semid 的信号灯 $semnum:
$semop = pack "s*", $semnum, -1, 0; semop $semid, $semop or die "Semaphore trouble: $!\n";
要给信号灯发出信号,只需要把 -1 换成 1 就可以了。
参阅第十六章的“System V IPC”一节。又见 IPC::Semaphore 模块。这个函数只有支持 Systerm V IPC 的机器上可以用。
send SOCKET, MSG, FLAGS, TO
send SOCKET, MSG, FLAGS
这个函数在套接字上发送一条信息。它和同名系统调用接收相同的标志——参阅 send(2)。在未联接的套接字上,你必须声明一个要发送的目的 TO,这样就会令 Perl 的 send 象 sendto(2) 那样运行。C 的系统调用 sendmsg(2) 目前没有在标准的 Perl 里实现。send 函数在成功时返回发送的字节数,失败时返回 undef。
(有些非 Unix 系统错误地把套接字当作与普通文件描述符不同的东西对待,结果就是你必须总是在套接字上 send 和 recv,而不能使用方便的标准 I/O 操作符。)
我们中至少有一个人会常犯的错误就是把 Perl 的 send 和 C 的 send 和写混淆起来:
send SOCK, $buffer, length $buffer # 错
这行代码会莫名其妙地失败,具体情况取决于字串长度和系统需要的 FLAG 位之间的关系。参阅第十六章中的“消息传递”一节。
setpgrp PID, PGRP
这个函数为指定的 PID(对当前进程使用 PID 等于 0)设置当前进程组(PGRP)。如果在那些没有实现 setpgrp(2) 的系统上调用 setpgrp 将会抛出一个例外。注意:有些系统上会总是忽略你提供的参数并总是做 setpgrp(0, $$)。幸运的是,这些就是我们最常用的参数。如果省略了参数,它们缺省是 0, 0。BSD 4.2 版本的 setpgrp 不接受任何参数,但在 BSD 4.4 里,它是 setpgid 函数的同义词。如果需要更好的移植性(从某种角度来看),直接使用 POSIX 模块里的setpgid 函数。如果你实际上想干的事是把你的脚本作成守护进程,那么请考虑使用 POSIX::setsid() 函数。请注意 POSIX 版本的 getpgrp 并不接受参数,所以只有 setpgrp(0, 0) 是真正可以移植的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-4.html
千千爱你
奠定中东军政格局
美国派出的宙斯盾是万吨级咱们得052才七千吨
话说美国就是轻视你伊拉克