2016-11-25 4 views
0

J'ai écrit un serveur Go qui agit comme le processus fils d'un morceau de Node.js.Comment utiliser le descripteur de fichier 4 (ou son équivalent) sous Windows?

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

Cependant, en utilisant stdin/stdout comme celui-ci empêche ce morceau de code d'être en mesure de se connecter à la console, comme le processus parent utilise stdouts poignée. Idéalement, j'utiliserais le descripteur de fichier 4 pour que cela profite de la façon dont Node l'utilise. Seul problème avec ceci, c'est que je suis complètement dépourvu des détails de Windows. Comment pourrais-je utiliser l'équivalent (le cas échéant) de/dev/fd/4 pour IPC sous Windows? PS: s'il y a une meilleure façon de gérer la lecture à partir de stdin, cela m'aiderait aussi beaucoup.

Répondre

2

Vous pouvez essayer os.NewFile:

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

Existe-t-il des répertoires spécifiques, il doit être placé ou sont couramment utilisés? – kpimov

+0

Vous posez des questions sur le nom? Je ne sais pas vraiment si le nom signifie quelque chose. Essayez de le laisser vide et voyez ce qui se passe. –