问题标签 [pty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 主 pty 如何检测从 tty 是否已退出?
我正在使用 BSD 样式的 pty/tty 对来实现运行子 shell。当用户退出子 shell 时,如何在主进程中检测到发生这种情况?我正在使用 select(nfds, &read_fds, NULL, NULL, &timeout); 在主端的 read_fds 中设置主 pty 文件描述符。
c - 从主端更改伪 tty 回显模式
在 linux 上,我在 master 端打开了一个伪 tty。虽然从属端没有客户端,但伪 tty 似乎在呼应我写给他的所有内容,这不是我所期望的。考虑以下代码:
当我运行这个程序时,我希望 read 调用会阻塞,但它会立即返回并且 readbuf 内容是 C。我怎样才能改变这种行为?当从端没有打开时,我希望主端写的字符要么消失,要么被从端读取。
更改主侧属性是正确的方法吗?
ruby - Ruby - Expect 和 Pty 的问题
我正在尝试编写一个 Ruby 脚本,它将通过 ssh 连接到服务器,运行给定的命令,并从中获取输出。到目前为止,这是我所得到的,主要改编自Programming Ruby书:
不幸的是,我得到的只是这个:
知道我做错了什么以及如何减轻这种情况吗?
linux - xterm 的 -S 选项(传递伪终端名称和描述符)在 Linux 中如何工作?
问候,在将旧的 Solaris 2.4 代码移植到 CentOS 5.3 时,我遇到了一个类似的调用
其中 %s 是两个字符的数字序列 XX,例如 00、01,%d 是数字文件描述符。这显然是一种告诉 xterm 使用 /dev/ttypXX (伪终端从站)的方法,但代码似乎并不打扰打开相应的主站,而是调用 pipe(2) 并将write fd 作为 %d 替换传递以上。在 Solaris 上,从 spawner 写入此 write fd 会导致输出出现在 xterm 子项中。顺便说一句,在 strace(1) 中,我没有看到任何尝试打开 /dev 下的任何内容。
ssh - 在“ssh”的 popen() 上调用 fgets() 正在刷新调用进程的标准输入的开头(ptty 问题)
我现在已经将其缩减为一个最小的测试用例。到目前为止,我已经能够确定这是与 ssh 管道出现的伪终端有关的问题。在 ssh 调用中添加“-t -t”可以改善问题,因为现在需要再次调用 fgets() 才能导致问题。我怀疑 ssh 命令的 stderr 输出以某种方式解决了这个问题,现在我已将 stderr 重定向到 ssh 代码中的 stdout 以执行。我确实想知道“tcgetattr:无效参数”错误是否是问题的一部分,但我不确定如何摆脱它。它似乎来自存在的 -t -t 。我相信 -t -t 正朝着正确的方向发展,但我必须以某种方式为 stderr 设置伪终端,也许测试会正常工作?
生成文件:
test.c 源文件:
这表明它正在运行:
这表明它以失败的方式运行:
c - 如何在不修改程序的情况下从标准输出捕获无缓冲的输出?
我正在编写一个用于运行程序的实用程序,我需要从程序中捕获无缓冲的标准输出和标准错误。我需要:
- 将 stdout 和 stderr 捕获到单独的文件中。
- 输出不需要缓冲(或行缓冲)。
- 无需修改正在运行的程序的源代码。
问题是,当管道输出到文件时,stdout 流变成块缓冲而不是行缓冲。如果程序崩溃,输出永远不会被刷新,并且是空白的。所以我需要在没有缓冲(或使用行缓冲)的情况下捕获标准输出。
我认为这可以用 pty 来完成,但我很难找到任何完全符合我要求的示例(大多数忽略 stderr)。事实上,我不确定我是否在 C 中找到了任何 pty 示例。大多数使用更高级别的接口,如 Python 的 pty 和 subprocess 模块。
任何人都可以提供帮助(使用代码片段或链接)吗?任何帮助,将不胜感激。
编辑:我想我已经解决了。以下两个链接非常有帮助。
- http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.bpxbd00/posixopenpt.htm
- http://www.gidforums.com/t-3369.html
我的代码可用作存储库:
bash - 通过标准输入的箭头键
我正在尝试通过标准输入向 bash 发送箭头键:
猫 | /bin/bash
然后我输入“echo hi”=>“hi”出现在控制台上(当然没有引号)然后我按向上箭头键 => ^[[A command not found 出现
是否可以通过 stdin 向程序发送箭头键?
我问的原因是:我想从另一个程序控制 bash。我想向 bash 发送箭头键
python - Python:何时使用 pty.fork() 与 os.fork()
我不确定是否使用pty.fork()
或os.fork()
何时从我的应用程序生成外部后台进程。(如国际象棋引擎)
如果父进程被杀死,我希望生成的进程死亡,就像在终端中生成应用程序一样。
两个分叉之间的起起落落是什么?
c - 在 C 中运行时与命令行程序交互(stdin/out)
我认为我想做的事情是调用 GUI/命令行包装 sftp(1)。我需要一种简单的方法来启动该程序并在运行时对其输出做出反应。此外,我必须能够向它发送输入,需要完全交互。
我尝试了 forkpty(模拟 TTY),但没有找到一个使用 forkpty 完成这项工作的好例子,而是有几个关于参数溢出的警告和不使用它的建议。另一个奇怪的事情是 windowssize 参数......
请给我一个或多个示例,说明如何在 C 中调用和与命令行程序交互,或者在 iPhone GUI 中集成 sftp 的另一种方式