Хорошо, по крайней мере, я частично обнаружил, почему hcitool требует полномочий пользователя root для сканирования LE, но не для нормального сканирования. Частично средства, что я определил местоположение системного вызова, который перестал работать из-за недостаточных полномочий при выполнении сканирования LE как обычного пользователя.
"Операция, не разрешенная" ошибка, сгенерирована writev системным вызовом со стеком вызовов, блокирующим следующим образом (все функции, реализованные в hci.c, посмотрите исходный код блюза):
hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev
Нормальное сканирование ("hcitool сканирование"), по-видимому, не должно отправлять запросы к контроллеру, но использует специализированный запрос ioctl, звоня:
ioctl(dd, HCIINQUIRY, (unsigned long) buf);
Кажется, что доступ для записи к контроллеру Bluetooth ограничивается, но почему и как я могу деактивировать это?
Через awk
и сохранение среднего столбца:
awk '{printf("%.f ", ($1/65)+0.5)}1' infile > outfile
24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
27 1701 L_B.doc
через awk
и без среднего столбца:
awk '{printf("%.f", ($1/65)+0.5); $1=""}1' infile > outfile
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc
Обратите внимание, что +0,5
используется в качестве замены функции ceil()
и округляется до следующего числа. И 1
в конце приобретает значение по умолчанию.
можно использовать perl
:
$ perl -MPOSIX=ceil -anle '$F[0] = ceil($F[0]/65);print "@F"' file
24 C_P.doc
11 C_M.doc
14 G_S.doc
15 J_Z.doc
24 J_M.doc
27 L_B.doc
Если вы понимаете «Неужели с использованием Python
в оболочке и предполагая, что A.txt
- ваш файл:
[sreeraj@server ~]$ cat a.txt
1533 C_P.doc
691 C_M.doc
905 G_S.doc
945 J_Z.doc
1549 J_M.doc
1701 L_B.doc
[sreeraj@server ~]$ for i in $(awk -v c=65 '{ print $1/c }' a.txt) ; do python -c 'print int(round('$i',0))' ; done >> b.txt
[sreeraj@server ~]$ paste b.txt a.txt > c.txt
[sreeraj@server ~]$ cat c.txt
24 1533 C_P.doc
11 691 C_M.doc
14 905 G_S.doc
15 945 J_Z.doc
24 1549 J_M.doc
26 1701 L_B.doc
[sreeraj@server ~]$
Это создаст файл c.txt с нужным выходом.
Как это работает:
Он использует awk
для разделения значений в 1-м столбце A.TXT на 65, а затем использовать Python
встроенный функция Раунд ()
, чтобы округлить десятичные дроби. Затем мы создаем файл c.txt с выходом из цикла и используете
, чтобы объединить C.Txt и A.Txt