Линукс… обожаю! Итак, кто скажет, не гугля, почему этот код нерабочий? lirc_monitor просто читает строки из устройства (сокет /var/lircd) и выплёвывает в stdout. Код: while true; do lirc_monitor | while read line; do if echo $line | grep -q "0000000000000000 05 EJECT MTK_IR"; then # something after LONG pressing EJECT button elif echo $line | grep -q "0000000000000000 05 GREEN MTK_IR"; then # something after LONG pressing GREEN button fi done done
Не-а, не угадали. lirc_monitor пишет в stdout, я же писал (это утилитка на пару кб, я её всю разобрал в IDA Pro). Ещё раз — этот код синтаксически полностью верен. И даже исполняется. Но совершенно непригоден для того, для чего предполагался. Оказывается, почти никто не знает, что потоки std в линюхе буферизируются. По умолчанию. Причём не построчно, а full buffering, каковой буфер может быть и мегабайт запросто. Когда мы получим в таком случае первый read line и реакцию на кнопку? Ага — хрен его знает, когда, когда буфер наконец-то flush-нется и строки в read line вывалятся сразу кучей. Решений два: 1. Патчить lirc_monitor, чтобы после вывода каждой строки он делал flush. SDK на эту железку у меня нет, не перекомпилируешь. Мне удалось сделать бинарный патч (я заменил одну из ненужных функций в секции импортов на fflush(), нашёл место, куда воткнуть вызов) и заработало. Правда, впердолить удалось только fflush(0), который сбрасывает все системные i/o буферы, что нехорошо. Править arm код наживую — то ещё садо-мазо, надо отметить, особенно радует его дебильная адресация. 2. Когда я это уже всё сделал, ВНЕЗАПНО оказалось, к этой железке есть загружаемый с флешки отладочный busybox, а в оном тулза script, которая делает line buffering всему, что из-под неё запускается. И попустило: Код: /tmp/script -q -c "lirc_monitor" /dev/null | while read line; do
Я когда-то давно начинал с альт-линукса - это был первый линукс который я увидел. Долгое время после этого был линуксоидом (скорее по интересам нежели по навыкам). Довольно фанатичным. Потом в какой то момент друг с работы ушел в админы, и я тоже подумал - надо. И решил что будет по хардкору - стану BSD шником. Речь шла с ходу - не о туманном "стать" а доподготовится за пол года и выйти на работу. В общем - я уволился, на последнюю зарплату купил книжку Эви Немет и Гарта Снайдера, по тем временам увесисто стоила - тысяч 6 рублей. И на три месяца ушел в летнюю кухню - осваивать. Вообще не вылезал оттуда 3 месяца. А спустя - устроился на работу. И тут надо сказать, что книжка сразу про несколько ОС написана, и когда ее читаешь непрерывно следуют друг за другом озарения связанные с родством всех операционок мира. Например - там упоминалось о том что WinNT ядро полностью поддерживает стандарты posix в то числе и такую шляпу как регистрозависимость, но просто она там для удобства отключена (и мол - включить можно). А это была одна из расхожих баек про "фундаментальные отличия", в среде линуксоидов. Вот с тех пор я перестал фанатеть про линукс. Дома и по работе использую Астра Линукс, серверные убунты, и свободные сборки базальта. Кстати - книжку всем рекомендую, особенно людям котоыре одинаково интересуются и ПО и железом - если вы начинающий, то она не только даст новые знания но и объединит то что у вас уже есть в единую систему.
Вона как... Я тут погуглил и оказалось, что люди уже м вашей проблемой сталкивались и есть даже патченный лиркмонитор, и даже вроде как от автора сего софта. Оказывается проблема давняя.
Я почти никто, у меня консольные логи всегда по fflush(stdout) выплёвываются. Иначе, если прожка упадёт, то в логах можно и не увидеть где.
Пригласила девушка парня "винду переустановить". Но парень оказался не простым и действительно начал ставить ПО. Тогда девушка сказала прямо: "хочу трахаться". Парень пронзительно на неё посмотрел и со словами "Ааа. .., Что ты сразу то не сказала? " поставил линукс