C++ 设备的 ioctl 不合适

标签 c++ linux usb

我使用的 USB 设备通常连接在/dev/ttyUSB0

有时,当有更多 USB 设备时,它会转到/dev/ttyUSB1 或其他

我在/etc/udev/rules.d/myrule.rules 下添加了一条规则,其中包含以下行:

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0666", SYMLINK="MyUSB"

效果很好,当我插入 USB 设备时,/dev/MyUSB 文件已准备就绪。

问题是,当我尝试使用 C++ 程序访问此文件时,它无法发送消息:“设备的 ioctl 不合适”。 如果我使用/dev/ttyUSB0(也可用),一切都会正常工作。

我是否必须修改我的 C++ 代码才能处理符号链接(symbolic link)?

提前致谢,

卡尔斯。

最佳答案

这似乎有效。我使用闪存驱动器进行了测试

在/etc/udev/rules.d/myrule.rules 中添加规则 使用 sudo udevadm control --reload-rules 重新加载规则 在程序中

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

int main() {    
  struct stat buf;
  int fd = open("/dev/MyUSB", O_RDWR  | O_CREAT);
  int k = fstat(fd, &buf);

  // The device handle is contained in st_rdev
  dev_t dt = buf.st_rdev;
  return 0;
}

关于C++ 设备的 ioctl 不合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952843/

相关文章:

C++ Lint : detect improper pass by value

linux - grep 本地好还是远程好?

linux - SUSE linux 上绑定(bind)系统调用

windows - 如何停止 USB 缓冲?

c++ - 在 C++ 中将 double* 转换为 int*

C++ Logger-我应该使用普通的xml解析器吗?

linux - 将文件内容读取到 grub.cfg 文件中的变量

python - 通过 pyusb 从 USB 鼠标(单芯片,ADNS-2700)获取图像

linux - 使用 usb-vhci 创建自定义虚拟 USB 设备

c++ - C++ 中 Pascal 字符串的数据布局