Различные вопросы про линукс

  • Автор темы Автор темы _MBK_
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Мьютекс - бинарный семафор, но больно мудреный и избыточный для моей задачи.
Вообще говоря, на ЛОРе вопрос решили, все достаточно просто оказалось.
На мой взгляд, вполне себе простой.
В "голове" создал, запустил потоки, по завершении последнего "прибил".
Каждый поток сперва лочит, а в конце освобождает мьютекс.
Лови первый попавшийся пример
 
Гм, но в этом примере синхронизация процессов внутри одной программы, а надо чтоб хоть десять запущенных с разных терминалов (в том числе и удаленных) синхронизировались
Может такое мьютекс? А именованный семафор запросто
Собственно, даже семафор избыточен, там еще более простой метод подсказали, без семафоров.
 
  • Спасибо
Реакции: ~RA~
Коли тема "Различные вопросы…", добавлю свой.
Как в первые 32 байта бинарного файла записать данные вида "6e9c9c03f94d2104dcaac0735f7ce24e204505d1696d376525241076dcf9abe2" чтобы вышло так:
Код:
0000000 6e 9c 9c 03 f9 4d 21 04 dc aa c0 73 5f 7c e2 4e
0000010 20 45 05 d1 69 6d 37 65 25 24 10 76 dc f9 ab e2
используя только bash?
 
Последнее редактирование:
Решение найдено, спасибо @_MBK_!
echo -n "$checksum" | xxd -r -p | dd of=/path/to/file conv=notrunc
 
  • Спасибо
Реакции: _MBK_
Чем больше я думаю над задачей, тем больше мне кажется, что я хочу странного, но, мало, ли, может решение есть или хотя бы нечто похожее?
Есть программа с графическим интерфейсом (не иксовым) Нужно, чтобы в какой то момент из нее запускалась новая консоль, не отображаемая на основном экране, но отображаемая на удаленном рабочем столе, в которой, в свою очередь, запускались какие-то приложения. Звучит дико?
 
Ну не спорю, возможно и так.
Предложи тогда, как упростить задачу, чтобы она стала решаемой.
Мне надо в качестве задачи-минимум иметь программу, выводящую данные на рабочий графический экран и служебную информацию в консоль (или несколько консолей) на удаленном рабочем столе.
 
Я, похоже, не вполне понимаю задумку… но нельзя ли, чтобы программа выводила служебную информацию хоть куда, а с удалённой машины просто читать этот вывод?
 
Я, похоже, не вполне понимаю задумку… но нельзя ли, чтобы программа выводила служебную информацию хоть куда, а с удалённой машины просто читать этот вывод?
Вооот! Именно это и надо! Как сделать чтоб программа выводила данные не на основной экран консоли, с которой она запущена, а в некую невидимую консоль, видную только с удаленной машины?
 
Не, ну это совсем некошерно.
Вдобавок, руками с удаленной машины придется запускать эту самую программу, которая бы читала и выводила, а надо чтобы по автомату.
Неужели нет прямого решения?
 
На удалённой машине по-любому придётся что-то запускать. А писать, можно и не в файл, конечно, но в него проще;. ;)
 
Ну да, понятно, семафорчики там всякие
Но все равно, неужели нет прямого решения? *(
 
  • Спасибо
Реакции: _MBK_
Спасибо, покурю rsyslog, хотя, конечно, я надеялся, что можно как то работать с несколькими терминалами, печальбеда. *(
Попробую как обычно, еще ЛОР помучить, может там что подскажут.
 
Вооот! Именно это и надо! Как сделать чтоб программа выводила данные не на основной экран консоли, с которой она запущена, а в некую невидимую консоль, видную только с удаленной машины?
Если я правильно понимаю, то дикости здесь нет. Идёт же переназначение ввода-вывода на другую консоль (tty)
Не дам конкретного ответа, но вроде как трубами-pipe проблема решается на уровне шела. В код никогда не совался.

Точно помню дефолтные пайпы:
0 - in
1 - out
2 - err

Не пинай, проверь да изучи. Как-то так должно работать:

sh$>command -flags args args2 < /...in 2>/...err/ 1>/...out
На уровне создания софта должна быть аналогичная штука. То, что она работает, и работает в линуксе отлично, подскажет тебе сетевая кошка - net cat (nc).
-------------------------------------------------------
Если надо именно внедрить в своё творение, то для начала посмотри исходники NC.

Хотя, возможно, не требуется мудрить от слова совсем, а запустить команду:
man nc

В этом случае nc-головной программы выступит сервером, а все удаленные nc-клиенты, натравленные на сервер, получат результат работы.
 
Последнее редактирование:
Неа, все равно не понял.
При помощи этой штуки как то можно с удаленной машины эту самую tty3 смотреть?
На ЛОРе меня раскритиковали, похоже все таки я странного хочу, предлагают тоже курить syslog и nohup *(
 
Неа, все равно не понял.
При помощи этой штуки как то можно с удаленной машины эту самую tty3 смотреть?
На ЛОРе меня раскритиковали, похоже все таки я странного хочу, предлагают тоже курить syslog и nohup *(
Да. Повторяю — под рукой линукса нет.
Должно быть нечто вроде такого:
sh$server>cat /path/tty3 | nc -l [port]12356

sh$client>nc ServerNameOrIP 123456 | handler-software[ or empty]

То есть на сервере выкидываешь поток вывода в сете-кошку, а ей уже даёшь команду слушать порт для клиентов.

На стороне клиентов подключаешься к серверу-имя-либо-ip:порту, и либо выводишь результат в консоль, либо «трубишь» (pipe) его в софт-приёмник.

При этом, при использовании nc, лучше даже не занимать консоль, а поменять принцип первой команды — организации сервера:

То, чё мне важно с параметрами | [[посылаем в ]] nc -l port

А на клиенте:
nc Сервер-порт [[| посылаем обработчику как stdin, либо выводим в консоль ]]

Ах да, сразу отмечу. Возможно, требуется авторизация-шифрование. В этом случае (забегаю вперёд, но всё же), работает финт — сервер на 127/24, клиент подключается через ssh и транслирует нужный порт. То есть, вместо сете-кошки — клиента, возможно, пригодится ssh-клиент. Но это уже на шаг далее забежал. Пока не парься. Лишь направление указываю.
 
Последнее редактирование:
  • Спасибо
Реакции: _MBK_
О, класс, интересная идея, покурю и ее! 'cooll)'
 
Статус
Закрыто для дальнейших ответов.