如何在Windows上使用文件描述符4(或其等价物)?

时间:2016-11-25 08:10:28

标签: node.js go multiprocessing file-descriptor

我一直在编写一个Go服务器,它充当一大块Node.js的子进程。

package main

import (
    "bufio"
    "encoding/json"
    "fmt"
    "os"
)

// IPC delimiter
const EOT byte = 3

func main() {
    // Listen on stdin for messages sent from the parent process.
    reader := bufio.NewReader(os.Stdin)
    for {
        input, err := reader.ReadString(EOT)
        if err != nil {
            fmt.Printf("sockets: failed to read from stdin: %v", err)
            if err == io.EOF {
                return
            }

            continue
        }

        // Strip EOT bye
        input = input[:len(input) - 1]

        var payload Payload
        if err := json.Unmarshal([]byte(input), &payload); err != nil {
            fmt.Printf("sockets: failed to read from stdin: %v", err)
            continue
        }
    }
}

但是,使用这样的stdin / stdout可以防止这段代码能够登录到控制台,因为父进程正在使用stdouts句柄。理想情况下,我会使用文件描述符4来利用Node如何使用它,唯一的问题是我对Windows的细节很无能为力。我怎样才能在Windows上使用/ dev / fd / 4的等效(如果有的话)?

PS:如果有更好的方法来处理stdin的阅读,那对我也有很大帮助。

1 个答案:

答案 0 :(得分:2)

您可以尝试os.NewFile

f := os.NewFile(4, "my_fd_4")