Я использую 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++ для работы с SYMLINKS?
Заранее спасибо,
Карлес.
Кажется, это работает. Я тестировал его с помощью флеш-накопителя
Добавьте правило в /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;
}