1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package stdio
import (
"net"
"os"
"os/exec"
"strconv"
)
func Dial(endpoint string, arg ...string) (net.Conn, error) {
cmd := exec.Command(endpoint, arg...)
cmd.Stderr = os.Stderr
stdin, err := cmd.StdinPipe()
if err != nil {
return nil, err
}
stdout, err := cmd.StdoutPipe()
if err != nil {
return nil, err
}
err = cmd.Start()
if err != nil {
return nil, err
}
local := IoAddr{path: strconv.Itoa(os.Getpid())}
remote := IoAddr{path: strconv.Itoa(cmd.Process.Pid)}
conn := IoConn{
reader: stdout,
writer: stdin,
local: local,
remote: remote,
close: cmd.Process.Kill,
}
return conn, nil
}
func GetStdioConn() net.Conn {
local := IoAddr{path: strconv.Itoa(os.Getpid())}
remote := IoAddr{path: "remote"}
conn := IoConn{
writer: os.Stdout,
reader: os.Stdin,
local: local,
remote: remote,
}
return conn
}
|