MagoBuono 02.05.2010 19:30
Есть вопрос! — "Что такое pipe?" или "Проблемы с ledcontrol"
В общем. Появилась идея некоторые события в системе отмечать led'ами на клаве. Для этого был поставлен пакет ledcontrol.Из чтения манов нихрена не понял как им рулить. но один из способов руления через pipe-файл.
Вот и вопрос: что вообще такое pipe-файл? Что, ка кработает, для чего нужен?
Просто гугление особо ничего не дало, по причине что непонятно ка запрос сделать, чтоб нужное мне выдалось о_О
В общем, буду благодарен за просвещение меня-любимого :)
digiwhite 02.05.2010 19:35 #
+ 0 -
Pipe - труба, конвеер или что-то аналогичное. В bashe вы я думаю видели команды в которых встречается символ '|'. Если я правильно помню, то pipe в контексте linux представляет собой особого вида файл, в котором в одном процессе он открыт только для записи, а в другом только для чтения.
ну то, что | это "труба" и употребление в баше я знал, да :) А вот столкнувшись с файлом, и абсолютно непоняв как мне им пользоваться-то, чтоб управлять моей софтиной, растерялся.
Один из примеров реализации последовательности команд через пайпы "|" и последовательное выполнение "&&":
Как только поймешь что делает этот код, считай что у тебя появилось базовое понимание как работают пайпы =)
cd /tmp && rm -f btd.sql.bz2 && wget http://example.com/btd.sql.bz2 && mysqldump -uroot -phelloworld --add-drop-table --no-data btd | grep ^DROP | mysql -uroot -phelloworld -Dbtd && bunzip2 < btd.sql.bz2 | mysql -uroot -phelloworld -Dbtd && mysql -uroot -phelloworld -Dbtd --execute="show tables like 'cache%';" | grep ^cache | xargs -I {} echo "TRUNCATE {};" | mysql -uroot -phelloworld -Dbtd
Как только поймешь что делает этот код, считай что у тебя появилось базовое понимание как работают пайпы =)
Код даже читать не хочется, как в баше работают пайпы я в курсе :) Чем регулярно и пользуюсь.
Мне интересно, как стоит понимать вот это:
ledd takes commands in two ways. First, it has pipe files from which it
reads the commands. These commands are normally given with the ledcon?
trol(1) program or written directly to the pipe.
Мне интересно, как стоит понимать вот это:
ledd takes commands in two ways. First, it has pipe files from which it
reads the commands. These commands are normally given with the ledcon?
trol(1) program or written directly to the pipe.
Видимо как-то так:
=)
echo "Помигай, пожалуйста, лампочкой капс-лока" | ledcontrol
=)
Угу, прочитал ман.
В теории, насколько понял, должно быть что-то типа такого:
Но на практике оно не сильно работает - видимо теория слабовата.
В теории, насколько понял, должно быть что-то типа такого:
$ touch led.in
$ ledcontrol --pipe ./led.in
$ echo "set c9 blink 100" >> led.test
Но на практике оно не сильно работает - видимо теория слабовата.
Вот я тоже примерно так и понял. Но как ни бился - все пофигу :(( А обидно.
Юху, мы победили =)
http://manpages.ubuntu.com/manpages/hardy/man8/ledd.8.html
http://manpages.ubuntu.com/manpages/karmic/man5/ledd.conf.5.html
$ sudo chmod a+w /var/run/ledd-pipe
$ echo "anim NCS 200 ncs 200 NCS 200 ncs 200 N loop 100 Cn 100 Sc 100 Cs 100 Nc" >> /var/run/ledd-pipe
$ echo "anim" >> ledd-pipe
http://manpages.ubuntu.com/manpages/hardy/man8/ledd.8.html
http://manpages.ubuntu.com/manpages/karmic/man5/ledd.conf.5.html
перевод: ледд может принимать команды либо из пайп-файлов(он их просто читает) либо команды поступаят из программы ledcon-troll или берёт их из конвейера.
Я понял так: ледд запускается либо с опцией чтения файла в который записываются комманды либо запускается программой leddcon-troll либо просто $command | ledd.
Я понял так: ледд запускается либо с опцией чтения файла в который записываются комманды либо запускается программой leddcon-troll либо просто $command | ledd.
Все вышеперечисленное перепробовал, ничего не сработало.
И в связи с тем, что вы это поняли как и я... я от думаю, мож этот ledcontrol просто не пашет? о_О
Потому что я, прочитав и не сумев справиться с ним, решил, что я не знаю что такое пайпы и надо бы выучить :) Но если не только я это так понимаю... что-то тут явно не так...
И в связи с тем, что вы это поняли как и я... я от думаю, мож этот ledcontrol просто не пашет? о_О
Потому что я, прочитав и не сумев справиться с ним, решил, что я не знаю что такое пайпы и надо бы выучить :) Но если не только я это так понимаю... что-то тут явно не так...
Внесу свои пять копеек. pipe - это неименовынный канал и при этом никакого файла нет, а если вы уверены, что должен быть именно файл, то это fifo - именованный канал, который может быть создан командой mknod.
Ну вы бы хоть перевод почитали чтоли...
И то и другое - каналы (pipe).
Один - именованный, другой - анонимный.
Т.е. файл - это тоже пайп. Только с именем.
И то и другое - каналы (pipe).
Один - именованный, другой - анонимный.
Т.е. файл - это тоже пайп. Только с именем.
Все верно, и то и другое каналы. Только именованный канал имеет свое название - fifo.
Вы хотя бы потрудились сходить по ссылке? FIFO - и то, и другое. Это всего лишь принцип работы очереди, но никак не название именованного канала.
Я сходил по первой ссылке и первая строчка, которая мне попалась на глаза: "In computing, a named pipe (also known as a FIFO for its behavior)....". Во второй ссылке написано (опять же в первой строчке), что анонимный канал это упрощенный FIFO (или именованный, как хотите, так и называйте) канал, из-за своей однонаправленности. Я не могу понять почему Вы так резко реагируете.
Сменил название посту.
Не очень понятно, что оно хочет.
Сама команта "set s5 on" должна просто включить лед скролл-лока.
mago@mdesk > ledcontrol set s4 on
/usr/bin/ledcontrol: no suitable pipefile found.
Не очень понятно, что оно хочет.
mago@mdesk > echo "set s4 on" | ledcontrol
/usr/bin/ledcontrol: nothing to output.
Сама команта "set s5 on" должна просто включить лед скролл-лока.
Простой прокси, переписывающий content-type, написанный на коленке:
mkpipe pipe
nc -l -p 8000 < pipe | nc 192.168.1.38 8000 | sed -e 's/application\/x-ogg/audio\/x-ogg/' > pipe
Именованный пайп — специальный файл, который возвращает всё, что в него кладут.
Нужно в коде:
touch заменить на mkfifo. В теоарии, на практике обычно проги сами пайп открывают. Я не знаю как это сделано в ledcontrol =)
Нужно в коде:
$ touch led.in
$ ledcontrol --pipe ./led.in
$ echo "set c9 blink 100" >> led.test
touch заменить на mkfifo. В теоарии, на практике обычно проги сами пайп открывают. Я не знаю как это сделано в ledcontrol =)
Да, и писать надо в сам пайп тогда (led.in), а не в непонятный led.test.
led.test мне кажется это просто опечатка) Понятно, что имелся в виду созданный led.in