英文:
How do I use file descriptor 4 (or its equivalent) on Windows?
问题
我一直在编写一个作为Node.js一部分的子进程的Go服务器。
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
// IPC分隔符
const EOT byte = 3
func main() {
// 监听stdin以接收从父进程发送的消息。
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString(EOT)
if err != nil {
fmt.Printf("sockets: 无法从stdin读取:%v", err)
if err == io.EOF {
return
}
continue
}
// 去除EOT字节
input = input[:len(input)-1]
var payload Payload
if err := json.Unmarshal([]byte(input), &payload); err != nil {
fmt.Printf("sockets: 无法从stdin读取:%v", err)
continue
}
}
}
然而,像这样使用stdin/stdout会阻止该代码段能够记录到控制台,因为父进程正在使用stdout的句柄。理想情况下,我会使用文件描述符4来实现这一点,以利用Node的使用方式,但唯一的问题是我对Windows的细节一无所知。我如何能够在Windows上使用与/dev/fd/4等效的IPC(如果有的话)?
PS:如果有更好的处理从stdin读取的方法,那也会对我有很大帮助。
英文:
I've been writing a Go server that acts as the child process of a chunk of 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
}
}
}
However, using stdin/stdout like this prevents this piece of the code from being able to log to console, as the parent process is using stdouts handle. Ideally I'd use file descriptor 4 for this to take advantage of how Node uses it, Only problem with this is I'm clueless with the nitty gritty details of Windows. How might I be able to use the equivalent (if any) of /dev/fd/4 for IPC on Windows?
PS: if there's a better way to handle reading from stdin, that would also help me a lot.
答案1
得分: 2
你可以尝试使用os.NewFile
:
f := os.NewFile(4, "my_fd_4")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论