Серийный номер USB не отображается с помощью команды lsusb -v

Стоит заметить, что оболочка должна установить перенаправления перед запуском программы.

Рассмотрим ваш пример:

./write_file.py >> ~root/log

В оболочке происходит следующее:

  1. Мы (оболочка) fork () ; дочерний процесс наследует дескрипторы открытых файлов от своего родителя (оболочки).
  2. В дочернем процессе мы fopen () (расширение) «~ root / log» и dup2 () его до fd 1 (и закрываем () временный fd). В случае сбоя fopen () вызовите exit () , чтобы сообщить об ошибке родителю.
  3. Все еще в дочернем состоянии, мы exec () "./write_file.py". В этом процессе больше не выполняется какой-либо из наших кодов (если мы не смогли выполнить, и в этом случае мы exit () , чтобы сообщить об ошибке родителю).
  4. Родитель будет wait () для завершения дочернего процесса и обработает его код выхода (копируя его, по крайней мере, в $? ).

Таким образом, перенаправление должно происходить в дочернем элементе между fork () и exec () : этого не может произойти до fork () , потому что это не должен изменять стандартный вывод оболочки, и это не может произойти после exec () , потому что имя файла и исполняемый код оболочки теперь заменены программой Python. Родитель не имеет доступа к файловым дескрипторам дочернего элемента (и даже если бы он был, он не мог гарантировать перенаправление между exec () и первой записью в stdout).

4
24.07.2017, 21:53
2 ответа

lsusbможет попытаться открыть USB-устройство в режимеO_RDWR(чтения/записи )и у вашего пользователя может не быть прав на это (какое-то сообщение об ошибке «Не удалось открыть устройство, некоторая информация будет отсутствовать" должно быть между выводом, если это так ). Запущенный с правами root lsusbтакже должен иметь возможность выводить все значение iSerial.

2
27.01.2020, 21:01

В целом существует множество различных USB-устройств (клавиатура, мышь, веб-камера,... ). lsusbотносится к подключенным устройствам на уровне протокола USB.

Некоторые USB-устройства являются устройствами хранения (USB-накопители, жесткие диски USB,... ). Они понимают другой протокол (более или менее SCSI )поверх протокола USB. В рамках этого протокола запоминающее устройство USB имеет серийный номер (, как и устройство ATA ). Это то, что вы видите в /proc/scsi/usb-storage.

Число iSerial, которое вы видите в lsusb, не имеет к этому никакого отношения.

Вот почему вы видите интересующий вас серийный номер одним методом, но не видите другим методом. Вот почему вы не можете использовать lsusbдля получения интересующего вас серийного номера

.
1
27.01.2020, 21:01

Теги

Похожие вопросы