【问题标题】:C Code: To connect a pty terminal to current process to execute commandsC代码:将pty终端连接到当前进程以执行命令
【发布时间】:2016-05-25 01:29:34
【问题描述】:

在 Unix 进程中,我打算编写代码来访问终端。所以,我可以登录来处理和运行一些命令。

例如, 我可以执行 telnet 0:2000 来获取我的终端,然后我可以从那里转储我的命令以转储进程信息。

在我的研究中,我发现我可以使用 /dev/pts 或 /dev/tty 来访问进程的访问终端。用户可以登录到这些终端,但不清楚它是如何工作的。

【问题讨论】:

  • 我真的希望您实际上没有运行 telnet 服务器...使用sshd

标签: c unix tty ioctl pty


【解决方案1】:

要创建一个新的伪终端,你需要依次调用以下函数:

  • posix_openpt(获取新主人)

  • grantpt(修复新从属的权限)

  • unlockpt(解锁从机)

  • ptsname(获取从机的名字)

  • open(打开从站)

  • setsid(可选,用于输入新的会话和进程组 - 通常在 fork 之后,当您在从属设备上运行单独的进程时)

【讨论】:

  • 谢谢@o11c,这实际上会打开一个 xterm 模型终端,但这不是我想要的。我不想打开任何新的 xterm。类似下面的东西。考虑我们有进程 X 正在运行 ..(并打开 2002 端口来监听连接 $telnet 0:2002 -> 打印这个 -> 这个 -> 退出
  • 嗯?请注意,您不必对 pty 做任何图形,您可以直接在程序中处理它
  • 是的,我同意,但是我需要在一个 pty 或 tty 或端口上打开才能连续收听。所以,我的程序将有两个过程。一个人将做它的工作或执行。其他线程/进程将在一个 tty 或端口上打开一个持续监听用户命令。为此,我需要附加到端口或任何 tty/pty。因此,用户可以访问该终端并运行命令。
  • 我仍然对你所说的感到很困惑。您只想要一个客户端-服务器架构吗?您想生成一个 xterm 并将其所有 I/O 重定向到您的进程吗?
  • OP 希望通过某个 ipv4 地址:端口将终端仿真器(即xterm)连接到已经运行远程进程,然后(OP 认为)它会表现得好像所述远程进程是通过 shell 在本地启动的,或者在某种意义上说 OP 可以输入文本并且远程进程通过stdin 接收它(就像一个普通的终端应用程序,在本地启动)远程进程写入stdout,另一端的终端仿真器显示它好像......你得到了图片:D
猜你喜欢
  • 1970-01-01
  • 2023-02-19
  • 2015-11-04
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2014-07-03
相关资源
最近更新 更多