我使用的 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/