不适合设备的ioctl

c++ Inappropriate ioctl for device

本文关键字:ioctl 不适合      更新时间:2023-10-16

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

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

我在/etc/udev/rules.d/myrule.rules下添加了以下一行:

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy",模式= " 0666 ",符号链接="MyUSB"

这很好,当我插入我的USB设备时,我得到/dev/myusb文件准备好了。

问题是,当我尝试使用我的c++程序访问这个文件时,它不工作发送消息:"不适合设备的ioctl"。如果我使用/dev/ttyusb0,它也是可用的,一切都工作得很好。

我必须修改我的c++代码来处理SYMLINKS吗?

提前感谢,

卡莱斯。

这似乎行得通。我用u盘测试了一下

在/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;
}