2016-11-25 44 views
0

我一直在写一个Go服务器,充当Node.js块的子进程。如何在Windows上使用文件描述符4(或其等价物)?

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 
     } 
    } 
} 

然而,使用标准输入/输出这样防止了这种片的代码从能够登录到控制台,作为父进程正在使用stdouts处理。理想情况下,我会使用文件描述符4来获取Node的使用方式,只有问题在于我对Windows的基本细节毫无头绪。我怎么能够在Windows上使用/ dev/fd/4等效(如果有的话)IPC?

PS:如果有更好的方式来处理从标准输入读数,这也会帮助我很多。

回答

2

您可以尝试os.NewFile

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

是否有应该放在或常用的任何特定的目录? – kpimov

+0

你问这个名字吗?我真的不知道名称是否意味着什么。试着把它留空,看看会发生什么。 –