socat 和 agetty 有什么区别?

socat 和 agetty 有什么区别?

我正在尝试设置virtio-串行在虚拟机和主机之间进行通信。为此,我遵循以下说明:

我知道主机上有一个端口,tmp/foo在客户机上显示为特殊字符设备/dev/hvc0。说明手册要求socat在主机和agetty客户机上使用以生成控制台端口。

然而,在使用时agetty,我没有得到任何控制台端口,然而,在socat客户机上使用时,我也可以与主机通信。

我想知道socat和之间的主要区别是什么,以及考虑到它是一种特殊的字符设备agetty,这是否是使用 socat 的正确方法。/dev/hvc0

我查看了两者的手册页,希望获得详细的描述。

答案1

Socat 是一个基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。由于这些流可以由大量不同类型的数据接收器和源构建,并且许多地址选项可以应用于这些流,因此 socat 可用于许多不同的用途。nixCraft

socat 可以执行串行线路操作,并且可以执行相当高级的功能,例如让多个客户端监听一个端口,或重用连接。socat 实例的生命周期通常由四个阶段组成。

  • 在 init 阶段,解析命令行选项并初始化日志记录。
  • 在打开阶段,socat 会打开第一个地址,然后打开第二个地址。这些步骤通常是阻塞的;因此,特别是对于像 socks 这样的复杂地址类型,必须在开始下一步之前完成连接请求或身份验证对话。
  • 在传输阶段,socat 通过 select() 监视两个流的读写文件描述符,并且,当一侧有数据并且可以写入另一侧时,socat 读取它,如果需要执行换行符转换,并将数据写入另一个流的写入文件描述符,然后继续等待两个方向上的更多数据。
  • 当其中一个流有效达到 EOF 时,关闭阶段开始。Socat 将 EOF 条件传输到另一个流,它会尝试仅关闭其写入流,使其有机会正常终止。在定义的时间内,socat 会继续向另一个方向传输数据,但随后会关闭所有剩余通道并终止。

agetty 打开一个 tty 端口,提示输入登录名并调用命令/bin/login。它通常由 调用init(8)。agetty 有几个非标准功能,对于硬连线和拨入线路很有用:手册页

  • 当读取登录名时,使 tty 设置适应奇偶校验位以及擦除、删除、行尾和大写字符。该程序可以处理具有偶校验、奇校验、无校验或空格校验的 7 位字符,以及无校验的 8 位字符。可以识别以下特殊字符:@ 和 Control-U(删除);#、DEL 和退格(擦除);回车和换行(行尾)。
  • 可选择从 Hayes(tm) 兼容调制解调器生成的 CONNECT 消息中推断波特率。
  • 当给出已开通的线路时,可选择不挂断(对于回拨应用程序很有用)。
  • 可以选择不显示 /etc/issue 文件的内容。
  • 可选择显示替代 /etc/issue 的备用问题文件。
  • 可选择不要求输入登录名。
  • 可选择调用非标准登录程序而不是 /bin/login。
  • 可选择开启硬件流控制
  • 可选择强制线路为本地线路,无需载波检测。
  • 如果需要,支持回铃。getty 使用的实际过程如下:首先,getty 解析其命令行。如果没有发现错误,并且命令行中的 tty 类型设置为“未知”(默认值)或未设置,则 getty 检查 /etc/ttytype 中的 tty 类型(如果程序是在定义 TTYTYPE 的情况下编译的)。如果在命令行或 /etc/ttytype 文件中找到了 tty 类型,则将其放入 TERM 环境变量中。接下来,getty 扫描默认文件(通常是 /etc/default/getty)以确定某些运行时值(如果使用 FSSTND 选项编译,则为 /etc/conf.getty)。默认文件中的值(其编译名称可以使用可选的 -d defaults_file 参数更改)优先于命令行中的值。然后 Getty 打开端口进行读写,并禁用 stdio 缓冲。如果指定了初始化,则执行初始化。

额外来源:索卡特议员

相关内容