【问题标题】:Termios.h serial communication. Check for device disconnectionTermios.h 串行通信。检查设备断开连接
【发布时间】:2015-07-19 19:11:28
【问题描述】:

我正在使用 termios.h 与 USB 加密狗进行通信。当我断开加密狗时,我想关闭文件描述符。有没有办法做到这一点。我知道对于 f.e. TCP/IP 连接如果对方关闭连接,您将获得 EOF。但是,使用串行连接时,我的程序基本上会乱跑(我正在使用循环从描述符中读取...)。

基本上我想有一些迹象表明连接已关闭,以便我可以优雅地关闭程序。也许通过使用 ioctl 更改设置?

【问题讨论】:

  • 只是为了澄清:我知道 udev 等。我想知道是否有类似于 TCP/IP 的方式可以读取文件描述符,如果它是 EOF,您就知道连接已关闭。我还没有找到使用串行端口执行此操作的方法。但也许有一个特殊的配置允许......(?)
  • 您的程序运行异常,因为...?也许你应该在那里寻找解决方案 - 从“损坏”描述符中读取应该将 errno 设置为 EAGAIN 以外的其他值,当根本没有数据时使用。
  • 感谢您的建议。明天我会试试这个......

标签: c linux serial-port termios


【解决方案1】:

我使用搜索短语如何在 Windows 的 C 中接收 USB 断开连接通知在 Google 上搜索了一下,并在 stackoverflow.com 上遇到了 Detecting USB Insertion / Removal Events in Windows using C++。如果您在 Linux 上运行,您可以调整搜索短语并尝试这些答案。

【讨论】:

  • 我知道如何使用 udev 守护进程或 libudev 检测事件。我设法做到了编写自己的守护进程。但是,我想知道是否有某种方法可以仅使用 termios 和套接字......因为当插入 USB 加密狗时我没有设法让 udev 规则工作,所以我写了这个守护进程......但为了要关闭正确的程序(我想启动该程序的任意数量的实例),我需要保存 PID 以便在删除加密狗时将其杀死。程序通过注意到加密狗被移除而自行关闭会很好......
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多