我是一名维护现有代码的人员。
我看到了这个片段:
我想了解将pack()调用作为msgsnd的第二个参数的含义。
我在msgsend文档中找到了以下内容:
调用System V IPC函数msgsnd将消息MSG发送到消息队列ID。MSG必须以本机长整型消息类型开头,后跟实际消息的长度,最后是消息本身。这种打包可以使用pack("l! a*", $type, $message)来实现。如果成功,则返回true;如果出错,则返回false。另请参见perlipc中的SysV IPC和IPC :: SysV和IPC :: Msg的文档。
这将第二个参数传递给pack作为$type,但没有解释$type是什么。我正在尝试理解的代码传递了消息长度。
发生了什么?据我所知,现有代码可靠地工作。
我看到了这个片段:
msgsnd( $mQueue, pack("l! a*", length($msg), $msg), 0)
|| ... error handling ...
我想了解将pack()调用作为msgsnd的第二个参数的含义。
我在msgsend文档中找到了以下内容:
调用System V IPC函数msgsnd将消息MSG发送到消息队列ID。MSG必须以本机长整型消息类型开头,后跟实际消息的长度,最后是消息本身。这种打包可以使用pack("l! a*", $type, $message)来实现。如果成功,则返回true;如果出错,则返回false。另请参见perlipc中的SysV IPC和IPC :: SysV和IPC :: Msg的文档。
这将第二个参数传递给pack作为$type,但没有解释$type是什么。我正在尝试理解的代码传递了消息长度。
发生了什么?据我所知,现有代码可靠地工作。
msgsnd
代码。它显示消息大小会自动从您传递的字符串计算出来。 - melpomeneman 2 msgsnd
,正如Leonard的回答所说:“*mtype
字段必须具有严格的正整数值。接收进程可以使用此值进行消息选择(请参阅下面的msgrcv()
描述)*”。系统本身并不关心;这只对接收者有意义。 - melpomene