非血缘进程间管道通信

非血缘进程间管道通信

读端(要设置为非阻塞模式,不然会阻塞住)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php
// 非血缘关系间
// 接受消息进程
$file = 'fifo_x';
if(!posix_access($file,POSIX_F_OK)){
    if(posix_mkfifo($file, 0666)){
        fprintf(STDOUT, "fifo create ok\n");
    }
}
$fd = fopen($file, "r");
stream_set_blocking($fd, 0);
while(1){
    $data = fread($fd, 128);
    if($data){
        fprintf(STDOUT, " pid = %d ,recv data = %s\n",posix_getpid(),$data);
    }
}
fclose($fd);


写端

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php
// 非血缘关系间
// 发送消息进程
$file = 'fifo_x';
if(!posix_access($file,POSIX_F_OK)){
    if(posix_mkfifo($file, 0666)){
        fprintf(STDOUT, "fifo create ok\n");
    }
}
$fd = fopen($file, "w");
while(1){
    $data = fgets(STDIN,128);
    if($data){
        fwrite($fd, $data,strlen($data));
    }
    fprintf(STDOUT, "pid = %d ,write bytes = %d\n",posix_getpid(),strlen($data));
}
fclose($fd);


多个读进程,哪个进程获取到cpu时间那个进程可以接收到数据(队列实现)

多个写进程一个读进程,会读取到所有的数据