问题标签 [tty]

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.

0 投票
4 回答
5147 浏览

linux - 捕获到 /dev/tty 的直接重定向

我正在为将文本直接发送到 /dev/tty 的程序开发应用程序控制器。

这是一个生产应用程序控制器,它必须能够捕获到终端的所有文本。一般来说,这不是问题。我们只是重定向标准输出和标准错误。这个特殊的应用程序直接调用 echo 并将结果重定向到 /dev/tty ( echo "some text" > /dev/tty)。通过我的应用程序控制器重定向无法捕获文本。

我确实有此应用程序的源代码,但无法修改它,也不再维护它。关于如何捕获和/或丢弃输出的任何想法?

0 投票
2 回答
14219 浏览

c - *nix 伪终端如何工作?什么是主/从通道?

我想在 Linux 系统上用 C 语言编写一个简单、愚蠢的 X 终端仿真器。

起初,我只是想我必须打开一个 shell 并显示它的输出。我检查了 xterm 和 rxvt 代码,它看起来有点复杂。

首先,我必须用 openpty 打开一个伪终端。所以我查看了手册页,发现 openpty 填充了 2 个文件描述符,即 master 和 slave。xterm 和 rxvt 代码都很混乱,因为这些特殊文件依赖于系统。

我了解 termios 的东西:它只是一堆关于终端转义码的信息。我真正不明白的是:我想用主/从文件描述符做什么?

打开终端、登录、在 shell 上执行“ls”的示例程序会很棒。

(英语不是我的母语,请原谅我最终的错误)

编辑:这是我想出的示例代码:

0 投票
1 回答
1031 浏览

unix - 如何在两个 TTY 之间创建循环?

每个 Hello 都有一个响应。第二个 TTY 将向发件人 TTY 发送一个问候,反之亦然:

第一个接收者应该向原始发送者发送“hello”,但它没有。怎么了?

[澄清]我有两个shell正在运行。/dev/pts/1 是初始发送者。

0 投票
3 回答
7810 浏览

unix - ksh:如何探测标准输入?

我希望我的 ksh 脚本具有不同的行为,具体取决于是否有通过 stdin 传入的内容:

检查 stdin 以查看它是否是终端 [ -t 0 ] 没有帮助,因为我的脚本是从其他脚本调用的。

如果 stdin 为“空”(第二种情况),则执行“cat <&0 >./tmp.dat”检查 tmp.dat 的大小会挂起等待来自 stdin 的 EOF。

如何检查标准输入是否为“空”?!

0 投票
5 回答
8650 浏览

c - 从 Linux 上的根程序获得对 tty 设备的独占访问权

我有一个在 Linux 上以 root 身份运行的程序,与一个 tty(实际上是一个作为 tty 实现的 LCD)交谈。值得的设备是/dev/ttyUSB0。我希望写入此设备的程序能够独占访问该设备,以免受到同时运行的其他程序实例的任何干扰。

我看到有一个名为 TIOCEXCL 的 ioctl 选项,它可以防止设备的附加打开,“除非发出 TIOCEXCL ioctl,否则对同一文件的多个 open() 调用将成功。这将阻止除 root 拥有的进程之外的其他打开。 " 我对此进行了测试,它的工作原理与宣传的一样:如果非 root 用户尝试打开 /dev/ttyUSB0 (一旦我更改了权限),则打开失败并显示“设备忙”之类的内容,并且如果 root 用户尝试打开它, 有用。

我理想中想要的是一种对 tty 的独占访问权,以便为 root 用户工作。因此,我将有多个 root 用户使用写入 LCD 的程序,但不知何故,他们对 LCD (tty) 的访问将被序列化。显然 TIOCEXCL ioctl 选项对我不起作用,因为它不会阻止 root 用户打开已经打开的 tty 设备。

我想这里有很多选择,但我正在与大家联系,看看您是否有其他想法或建议。

  1. 也许我错过了使用 TIOCEXCL 的一些东西......

  2. 也许还有其他方法可以通过 open() 或 ioctl() 或其他方式获得独占访问。

  3. 如果有某种方法可以检测到其他进程打开了设备,我可以等待并重试。我知道 lsof 但我不愿意从这个程序内部调用它只是为了了解这一点。并且有竞争条件。(也许我可以克服它?:))

  4. 我可以像以前那样实现锁定,以获得对 tty 设备的独占访问权限。

更新1:

由于写入 LCD 设备的唯一程序是我的,因此我倾向于执行以下操作(伪代码)来锁定代码内部:

0 投票
3 回答
36231 浏览

macos - Mac OS X 中 Ctrl-Alt F1 和 Alt-F1...F6 的 TTY 开关

是否可以...

  1. 为键绑定设置终端模式Ctrl+ Alt+F1
  2. 在 TTY 之间切换Alt+ F1...F6

Ubuntu 有上述命令可以在不同的 TTY 之间移动。

Mac似乎没有激活它们。

如何在 Mac 中激活上述功能?

0 投票
1 回答
2984 浏览

linux - 在 Linux 中处理 /dev/tty 设备上的用户中断(UART 中断)

这是一些代码示例,但问题是当使用“putty”通过串行线路发送“中断”时,不会调用信号处理程序。

这是我的 stty 设置:

我错过了什么/为什么我没有收到信号?我正在使用 USB-2-Serial 转换器,我可以看到中断已发送,但在此客户端上根本没有触发任何内容。

0 投票
2 回答
268 浏览

c - 进程如何知道它何时被后台处理?

当我 scp 一个文件时,我可以用 ^Z 停止它并将它放在后台。当它在后台时,它会停止打印其进度,但复制会继续。如果我再次将其置于前台,它将继续打印。它是怎么知道的?看头?这会发生在标准的ptty上吗?

0 投票
3 回答
7854 浏览

unix - 如何创建用于读取输出和写入输入的伪 tty

我正在使用 fork() 和 execvp() 来生成一个必须相信它已连接到交互式终端才能正常运行的进程。

一旦产生,我想捕获进程的所有输出,以及能够将输入发送到进程。

我怀疑 psuedo-ttys 在这里可能会有所帮助。有没有人有关于如何做到这一点的片段?

0 投票
2 回答
4286 浏览

linux - 如何确定哪个 tty 文件指向哪个 USB-to-Serial 设备?

我有两台旧机器使用 ftdi_sio 驱动程序连接到带有 USB 的 Linux 机器,连接到/dev/ttyUSB0/dev/ttyUSB1. Linux 机器正在中继和分析机器之间的流量。当 Linux 机器启动时,机器几乎随机地连接到文件。问题是要知道哪个是哪个。

当然,我可以只询问设备,但我想避免由于将错误数据发送到错误的设备而导致故障的风险。有没有办法找出例如连接到 tty 文件的设备的 ID?