问题标签 [termios]

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 投票
2 回答
5460 浏览

linux - Linux termios VTIME 不工作?

整个上午我们都在敲打我们的脑袋。我们在嵌入式 linux 设备和 Ubuntu 机器之间设置了一些串行线路。因为我们的代码通常会返回两个(有时更多,有时正好是一个)消息读取,而不是每个实际发送的消息读取一个消息,所以我们的读取操作已经搞砸了。

这是打开串行端口的代码。InterCharTime 设置为 4。

另一端为通信进行了类似的配置,并且有一小部分特定的 iterest:

现在,当我在接收机器上运行一个读取线程时,“hello world”通常被分成几条消息。这是一些示例输出:

其中数字后跟冒号是收到的一条消息。你能看出我们犯了什么错误吗?

谢谢你。

编辑:为清楚起见,请查看Linux Serial Programming HOWTO 的第 3.2 节。据我了解,VTIME 为几秒钟(意味着 vtime 设置在 10 到 50 之间的任意位置,试错),VMIN 为 1,应该没有理由将消息分解为两条单独的消息.

0 投票
3 回答
982 浏览

linux - 非规范终端 I/O 应用程序的 Linux 终端问题

我有一个用 C 编写的小应用程序,旨在在 Linux 上运行。该应用程序的一部分接受来自键盘的用户输入,并且它使用非规范终端模式,以便它可以响应每个击键。

接受输入的代码部分是一个在循环中重复调用的简单函数:

这会从终端读取单个字符。如果在某个时间范围内(由 termios 结构中的 c_cc[VTIME] 值指定)没有接收到输入,则 read() 返回 0,并再次调用 get_input()。

这一切都很好,除了我最近发现如果你在终端窗口中运行这个应用程序,然后关闭终端窗口而不终止应用程序,应用程序不会退出而是启动到 CPU 密集型无限循环,其中 read() 连续无需等待即可返回 0。

那么,如果应用程序从终端窗口运行,然后关闭终端窗口,我怎样才能让应用程序正常退出呢?问题是 read() 永远不会返回 -1,因此错误情况与 read() 返回 0 的正常情况无法区分。所以我看到的唯一解决方案是放入一个计时器,并假设如果出现错误情况read 返回 0 的速度比 c_cc[V_TIME] 中指定的时间快。但是这个解决方案充其量似乎很老套,我希望有更好的方法来处理这种情况。

有什么想法或建议吗?

0 投票
1 回答
1727 浏览

c - 异步串行传输 C

所以我正在开发一个程序,它模糊地类似于 Br@y's Terminal,但是从 linux 的命令行运行

它将进行异步传输,输出串行(Com)端口。现在我认为我需要的标题/库是 termios.h

现在我以前只使用过 posix 并且我发现它相当繁重,虽然手册页/规范 http://www.opengroup.org/onlinepubs/007908799/xsh/termios.h.html \

有谁知道termios的任何好的指南?我会自己用谷歌搜索(我累了),但我对内容的理解不够,无法知道指南是否好。我使用的是正确的库吗?

0 投票
2 回答
6710 浏览

python - Linux:通过管道输入 Python (ncurses) 脚本、标准输入和 termios

显然,这几乎是“从 python 中的标准输入读取时出现错误的管道文件描述符 - 代码日志”的副本;但是,我相信这种情况稍微复杂一些(并且它不是特定于 Windows 的,因为该线程的结论是)。

我目前正在尝试在 Python 中尝试一个简单的脚本:我想为脚本提供输入 - 通过命令行参数;或通过“管道”将字符串添加到此脚本 - 并让脚本使用curses终端界面显示此输入字符串。

下面给出了完整的脚本,这里称为testcurses.py。问题是,每当我尝试实际管道时,这似乎会弄乱标准输入,并且curses窗口永远不会显示。这是一个终端输出:

据我所知,问题是: - 每当我们将字符串导入 Python 脚本时,Python 脚本都会丢失对终端的引用as stdin,并注意到被替换stdin的不再是termios结构 - 因为stdin不再是终端,curses.initscr()立即退出而不渲染任何东西。

所以,我的问题是 - 简而言之:我能以某种方式实现,语法echo "blabla" | ./testcurses.py -最终显示管道字符串curses吗?更具体地说:是否可以stdin从 Python 脚本中检索对调用终端的引用,即使该脚本正在“管道”到?

在此先感谢您的任何指点,

干杯!

 

 

PS:testcurses.py脚本:

0 投票
3 回答
1122 浏览

c - 如何更改 termios 配置,以便 getc() 在用户按下时立即返回钥匙?

我想为我的 CLI 应用程序实现自动完成功能。getc() 的默认行为仅在输入以下字符列表时返回:NEW_LINE 或 EOF。我想将 TAB 添加到此列表中,以便触发我的自动完成算法。

有没有办法做到这一点,例如,使用termios?编辑线库(http://www.thrysoee.dk/editline/)可以做到,但我不知道它是怎么做的?

0 投票
1 回答
491 浏览

c - 嵌入式设备上的 termios 截断的串行数据

我正在开发一个 C 程序来监听在 ARM Linux 嵌入式设备上运行的串行端口。

其他数据集工作正常,但总是当我发送一组特定数据时,该组的开头被截断。被截断的内容如下(在目标上运行的 slsniff 程序输出):

我已经调试到足以确定这是由一些 termios 常量引起的,它使用文本 ETX 的结尾来截断。

现在我下来:

设置的分隔符是 CR 0x0d,似乎在所有情况下都可以正常工作。

非常感谢任何帮助。

最好的问候,伯特

0 投票
1 回答
2386 浏览

linux - Why does open()ing a Linux tty hang after killing a process which configured it?

I want to set a serial port in Linux to "raw" mode at 115200 baud. If I run the following program

and interrupt it during the sleep with Ctrl-C, then run it again, there is no output the second time - the program hangs during the open() call. Even running as root doesn't help.

There is no indication the first process is still using the port or that the port is locked, nothing is apparent in /var/lock/ or ps aux | grep tty

My best option right now is to ensure that whenever a process using a tty is terminated it correctly closes the port. But why should this problem arise at all? Shouldn't the aborted process release the port?

0 投票
2 回答
4501 浏览

python - Python TTY 控件

我想我不清楚 getty/agetty/mgetty 程序在 linux/unix 机器上的功能是什么。我可以在 tty 上启动一个 shell,如下所示:

..如果我切换到 tty3,则有一个 shell 正在运行-但某些击键被忽略/永远不会发送到 shell。shell 知道 TTY 设置不正确,因为 bash 会说“无法打开 tty,作业控制已禁用”

我知道“termios”模块具有更改 TTY 设置的功能,这是“tty”模块使用的功能,但我找不到 python 正确设置 TTY 并启动 shell 的示例。我觉得它应该是简单的东西,但我不知道在哪里看。

查看 *etty 程序的源代码对我没有帮助-C 对我来说看起来像希腊语:-/

也许我只是没有寻找合适的条款?过去有人用 Python 替换了 *etty 程序,并且有他们愿意分享的解释吗?

感谢您接受我的基本问题:)

0 投票
3 回答
2500 浏览

escaping - 如何使用 termios 区分 Escape 和 Up/Down/Left/Right?

GitHub

这是我能想到的最好的处理 ncurses 式按键的方法(由于各种原因,我实际上正在编写 ncurses 的替代方案)。

使用此代码构建的示例应用程序建议用户“按 Escape 退出”。事实上,它需要 Escape + Escape 或 Escape + An Arrow Key。我想解决这个问题。

0 投票
1 回答
7086 浏览

c - 串口操作上的C读取调用阻塞

我正在尝试在 Linux 中编写一个 C 程序,以通过串行端口从微控制器发送和接收数据。作为测试,我已将微控制器配置为立即回显所有发送的字符。我已经验证这在 minicom 中有效,并且还通过使用“cat”和“echo”来发送和接收数据。

但是,当我尝试在 C 程序中执行相同操作时,我的读取调用会永远阻塞。我将串行端口设置为非规范模式,最小值为“1”,时间为“0”。我的 minicom 测试证明微控制器在输入字符时会返回字符,因此我希望 read 在 write 调用发送字符后返回。我已经将我的代码与几个在线示例进行了比较,但我没有发现任何我遗漏的东西。我已经尝试了以下代码的几种排列,但没有成功。有人能发现问题吗?