两个进程间,使用FIFO进行通信.
闲言少述,直接上文:
- my $cmd_ff = "./ffmpeg -i ....";
- my $uuid = `uuidgen`; // 生成不重名FIFO的名称
- chomp $uuid;
- system("mkfifo $uuid"); // 创建FIFO
- my $pid_ffmpeg = fork; // 创建进程
- if (0 == $pid_ffmpeg)
- {
- // 子进程
- open(STDERR, ">", $uuid); // 将STDERR重定向到FIFO
- exec($cmd_ff); // 启动ffmpeg, 它的STDERR都输出到FIFO
- }
- else
- {
- // 主进程
- $/="\r";
- $|++;
- open my $fh, "<", $uuid; // 以FIFO为输入,并定位其到变量$fh
- while(<$fh>) // 每次读取一行
- {
- // 处理每行的数据
- }
- }