golang 将套接字附加到标准输入/标准输出

Posted

技术标签:

【中文标题】golang 将套接字附加到标准输入/标准输出【英文标题】:golang attach a socket to Stdin/Stdout 【发布时间】:2016-05-07 00:27:21 【问题描述】:

将套接字连接到 Stdin/Stdout 的最佳方法是什么。我知道我们可以将标准输入/标准输出重定向到任何文件描述符,但是我们如何对套接字做同样的事情。 (比如 socat 的工作原理)?

【问题讨论】:

你写的代码在哪里?你有没有尝试过。 我添加了一些东西来打开管道并将管道的 fd 设置为 terminal.MakeRaw() 但看起来我们不能用套接字做类似的事情。 【参考方案1】:

Go 中的套接字类型实现了io.Writer 接口,而os.Stdin 实现了io.Reader,所以我的第一个猜测是尝试bufio.Writer。它可能看起来像:

package main

import (
    "bufio"
    "os"
)

func main() 
    socket := getSocket() // left as an exercise for you to implement
    writer := bufio.NewWriter(socket)
    writer.ReadFrom(os.Stdin)
    // do something to determine when to stop

【讨论】:

创建套接字是指 net.Dial() 吗?我需要将当前终端连接到 unix 套接字。 - 套接字的另一端正在运行 getty。我是否必须使用 termios 结构来完成此操作? @Harish net.Dial 可以打开 unix 套接字:net.Dial("unix", "/path/to/unix.sock")

以上是关于golang 将套接字附加到标准输入/标准输出的主要内容,如果未能解决你的问题,请参考以下文章

将标准输入流式传输到套接字

Mac 命令学习 - 标准输入输出重定向

如何将 A 的标准输出重定向到 B 的标准输入,将 B 的标准输出重定向到 A 的标准输入?

实时解码 - 标准输入到标准输出

将多个 png 转换为 bmp 从标准输入到标准输出

C 低级标准输入以接受文件名,然后将文件内容打印到标准输出