首页 文章

c设备的ioctl不合适

提问于
浏览
0

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

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

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

SUBSYSTEM ==“usb”,ATTRS ==“xxxx”,ATTRS ==“yyyy”,MODE =“0666”,SYMLINK =“MyUSB”

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

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

我是否必须修改我的C代码才能处理SYMLINKS?

提前致谢,

普约尔 .

1 回答

  • 0

    这似乎有效 . 我用闪存驱动器测试过它

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

相关问题