php和go进行跨进程fifo通信

fifo的文件需要提前建立好,或者用程序处理

php

<?php
$fifoName = "my_fifo";

// 打开命名管道进行读取
$fifo = fopen($fifoName, "r+");
if ($fifo === false) {
     die("Unable to open FIFO: $fifoName");
}
 // 读取数据
$data = fread($fifo, 1024);
echo "Read from FIFO: " . $data;
 // 关闭管道
fclose($fifo);

go

package main

import (
_       "fmt"
        "os"
        "syscall" 
)

func main() {
        // 创建一个命名管道
        fifoName := "my_fifo"
//      _ = os.Remove(fifoName) // 确保先前的命名管道被删除
        _ = syscall.Mkfifo(fifoName, 0666)
       defer os.Remove(fifoName) // 确保程序结束后删除命名管道

        // 打开管道进行读写
        fifo, err := os.OpenFile(fifoName, os.O_RDWR, 0666)
        if err != nil {
                panic(err)
        }
        defer fifo.Close()

        // 写入数据
        _, err = fifo.WriteString("Hello from the other side\n")
        if err != nil {
                panic(err)
        }

        // 读取数据
//      buf := make([]byte, 50)
//      n, err := fifo.Read(buf)
//      if err != nil {
//              panic(err)
//      }

//      fmt.Println("Received:", string(buf[:n]))
}
posted @ 2024-09-15 09:35  朝阳1  阅读(11)  评论(0编辑  收藏  举报