c ++ Неуместный ioctl для устройства

0

Я использую 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?

Заранее спасибо,

Карлес.

  • 0
    Я думаю, что вы можете найти свой ответ здесь (получить информацию об устройстве из файлового дескриптора): stackoverflow.com/questions/16070737/… Вы можете получить устройство из файлового дескриптора с помощью fstat
Теги:
usb

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;
}
  • 0
    Да, то, что вы публикуете, имеет смысл, и именно так выглядел мой код. Но это не работает ... это всегда выдает мне одно и то же сообщение "Неуместно ioctl для устройства".
  • 0
    Это действительно странно, я тестировал с помощью стандартной флешки. Какое устройство вы используете - пробовали ли вы запускать его как root. Возможно, твой набор инструментов сломан.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню