Записать в / sys / bus / usb / drivers_probe с помощью приложения C ++ - PullRequest
1 голос
/ 04 апреля 2020

Я пытаюсь создать приложение на C / C ++, которое должно блокировать некоторые USB-устройства.

У меня есть похожая проблема, описанная здесь , но теперь мне нужно внедрить это решение в C ++. Мне просто нужно написать строку в /sys/bus/usb/drivers_probe. Я пробовал что-то вроде:

ofstream fDriversProbe;
fDriversProbe.open("/sys/bus/usb/drivers_probe", ios::out | ios::binary | ios::app);

if(!fDriversProbe)
{
   cout << "Could not open file drivers_probe.";
}

fDriversProbe.write("1-1:1.1", strlen("1-1:1.1"));

if(!fDriversProbe.good())
{
   cout << "Could not write data to file\n";
}

, которые не приносят никаких ошибок или предупреждений, но также, кажется, не работают.

Затем я решил выполнить рабочую команду из кода.

system("sudo sh -c \"echo 1-1:1.1 > /sys/bus/usb/drivers_probe\"");

или

system("echo 1-1:1.1 | sudo tee /sys/bus/usb/drivers_probe");

без удачи. Когда я выполняю ту же команду (с тем же интерфейсом) вручную с терминала, все работает нормально, и USB-устройство начинает работать.

1 Ответ

0 голосов
/ 05 апреля 2020

Пробовали ли вы сбрасывать объект ofstream, например, fDriversProbe.flu sh () после каждой записи. У меня была похожая проблема, когда я пытался передать данные затвора камеры и получить параметры с помощью атрибута sysfs, экспортируемого драйвером, но настройки не доходили до драйвера. Сопровождение записи в файл sysfs с последующим гриппом sh устранило проблему для меня.

...