问题标签 [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++ - 在 Linux C++ 中获取 PTY 的最简单方法
我正在编写一些需要 Bash 接口的东西。起初我以为我可以只使用 popen 或 QProcess。(我正在使用 QT C++)它们工作正常,但我无法让它们在 tty 中运行 Bash,如果你要使用 sudo 之类的东西,你需要它,这需要 tty/pty 来接受密码。
我在 GNU 标准 C 库中找到了一些类似 forkpty()、openpty() 等的东西,但即使在阅读了它们相应的联机帮助页之后,也无法弄清楚如何使用它们或找到任何好的示例。从字面上看,我的程序的所有这部分需要做的是能够从运行 /bin/bash 的 tty 读取/写入。真的就这么简单,还是有比看上去更多的东西?
如果是这样,谁能提供一个简明的例子来说明如何做到这一点?提前致谢!编辑:这是我想出的头文件!
c++ - X 在调用 forkpty 时抛出错误。(C++)
当我的程序到达这一行时:
输出这个:
并终止。如您所见,我正在尝试创建一个 pty 来运行东西,但它不起作用。
另外,有没有办法forkpty()
可以在类中调用?(我尝试了两种方法,但都没有奏效。)
我在 Ubuntu 9.10 上用 QT C++ 编程。
编辑:这是最终对我有用的代码问题的链接。
c++ - 文件描述符中的 Read() 挂起
嘿,希望这应该是我最后一个与 PTY 相关的问题,我可以继续讨论更令人兴奋的问题。(C;
这是我为创建和读取/写入 pty 而编写的一组小函数:http: //pastebin.com/m4fcee34d 唯一的问题是它们不起作用!在我运行初始化程序和 writeToPty("ls -l") 后, readFromPty 的“输出”仍然为空。
Ubuntu,QT C++
编辑:好的,我可以确认所有这些东西都有效,除了读取循环。在调试器的 locals/watchers 选项卡中,它显示 QString“输出”实际上确实得到了正确的数据,但是在它( read() )用完输出中的字符之后它运行然后挂起。发生了什么事,我该如何解决?谢谢!(C:
编辑:这是问题的链接,其中包含最终对我有用的代码。
c - 子进程无法从创建的伪终端读取
我正在尝试使用伪终端编写一个可以使用密码登录 SSH 的应用程序。但是如果我 write() 到主设备,那么数据就不会出现在从设备中。这是一个简单的测试用例:
该应用程序将首先输出“Press Enter to send a byte”。按 Enter 后,我希望子进程的 read() 返回。但是即使 master 的 write() 成功,那里的 read() 似乎也会无限期地阻塞,所以 master 在 waitpid() 上永远等待。这是怎么回事?
linux - linux上的软件串口环回
目前我需要开发一些程序,将通过串行线路与思科设备进行通信。我想在我的开发 linux 机器上构建测试环境。所以,我找到了dynamips cisco emulator。该仿真器可以通过带有“-U /dev/ttyS0”选项的串行线提供接口。好吧,这会导致 dynamips 打开硬件串行端口并通过它进行通信。我可以使用 minicom 等串行客户端从另一台 linux 机器连接到这个硬件串行端口。
但是,由于我在两台 linux 机器上都使用了 virtualbox,所以我通过 virtualbox 功能链接串行端口以将串行端口转发到命名管道。该方案似乎有效,但非常多余。我正在寻找一种在单个 linux 机器上运行 dynamips 和 minicom 的方法。
我发现伪终端在我的情况下可能很有用。但我尝试使用“-U /dev/ptmx”运行 dynamips,然后与 minicom 连接以创建 /dev/pts/... 端口,反之亦然。在这两种情况下,我都有输入/输出错误。
c - 如何向子进程发送 Ctrl-C 控制字符或终端挂断消息?
我有一个在伪终端中运行的子进程。父进程不以 root 身份运行,但子进程通过 su 或 sudo 运行。因此,不可能向子进程发送信号以强制其退出。我想通过以下方式之一强制它退出:
- 模拟 Ctrl-C。
- 模拟终端挂断。
我该怎么做?我已经有一个 pty master fd,我尝试过这样的事情:
但它什么也没做。
c - forkpty - 套接字
我正在尝试开发一个简单的“telnet/server”守护程序,它必须在新的套接字连接上运行程序。这部分工作正常。
但是我必须将我的新进程关联到一个 pty,因为这个进程有一些终端功能(比如 readline)。
我开发的代码是(其中 socketfd 是新输入连接的新套接字文件描述符):
使用该代码,我的“prgName”的 stdin / stdout / stderr 文件描述符与套接字相关联(使用 ls -la /proc/PID/fd 查看时),因此,此进程的终端功能不起作用.
通过远程设备上的 ssh/sshd 连接并执行“localy”(在 ssh 连接下)prgName 的测试表明,该进程“prgName”的 stdin/stdout/stderr fd 与 pty 相关联(因此此过程的终端功能运行良好)。
我做错了什么?如何将我的 socketfd 与 pty(由 forkpty 创建)相关联?
感谢
亚历克斯
ruby - 如何在 Ruby 中终止 PTY.spawn 调用?
如果我使用 ruby 的 pty 类运行这样的命令,如果找到某个输入字符串,我该如何杀死它?
这样做的正确方法是什么?
c - 如何通过 minicom 或 screen 与 pty 通信?
我正在尝试围绕某些硬件提供类似 AT/Modem 的接口。在这篇文章之后,我让服务器使用 openpty() 设置了一个 pty。
现在,我可以使用打开从属设备并通过 read() 和 write() 调用进行通信的客户端应用程序按预期与服务器通信。
但是,我也希望能够使用屏幕命令或 minicom 手动向从站发出命令。但是,在尝试执行此操作时,服务器似乎从未收到任何数据。这种方法有什么重要的地方吗?
c - 从 pty 读取
我想在 Linux 上使用(Unix 98 风格的)伪 tty接收(以及以后的进程)write(1)
和消息。wall(1)
我已经有以下最小实现:
现在的问题是它只适用于阅读第一条消息,然后 read 给了我一个 EIO 错误。这是为什么?