
ftok应用范围:在IPC通信及消息中使用
ftok应用范围:在IPC通信及消息中使用
解析:
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。
在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。
如指定文件的索引节点号为65538,换算成16进制为0x010002,而你指定的ID值为38,换算成16进制为0x26,则最后的key_t返回值为0x26010002。
ftok的第一个参数是一个文件的路径名称.一般在应用系统中,使用$HOME或者应用系统的根目录作为它的值.这样产生的key_t就不会与系统中其他的软件和系统的相同了,从而避免造成冲突. 如果,你使用配制文件,或者写死在程序里面,key_t的值有可能与系统中其他的软件. ftok的第二个参数是用于你在自己的系统里产生多个IPC的时候,区分它们使用的. 总之, ftok的首个参数是用于与其他系统相区别的.
第二个参数是用于本系统的不同的IPC区别使用的.
<?php $msg_key = ftok( __FILE__, 'a' ); //生成避免冲突值 $msg_queue = msg_get_queue( $msg_key, 0666 ); //启动进程 $pid = pcntl_fork(); if( $pid == 0 ){ //子进程向父进程报告 msg_send( $msg_queue, 1, "father i am " . getmypid(). " and i am working! \n" ); exit(); //退出子进程 }else if( $pid ){ msg_receive( $msg_queue, 0, $message_type, 1024, $message, TRUE, MSG_IPC_NOWAIT ); echo $message; pcntl_wait( $status ); //阻塞回收子进程 if( $status ){ msg_remove_queue( $msg_queue ); } }