【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
非血缘进程间管道通信
非血缘进程间管道通信
读端(要设置为非阻塞模式,不然会阻塞住)
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时间那个进程可以接收到数据(队列实现)
多个写进程一个读进程,会读取到所有的数据