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

Статус
Закрыто для дальнейших ответов.

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Мьютекс - бинарный семафор, но больно мудреный и избыточный для моей задачи.
Вообще говоря, на ЛОРе вопрос решили, все достаточно просто оказалось.
На мой взгляд, вполне себе простой.
В "голове" создал, запустил потоки, по завершении последнего "прибил".
Каждый поток сперва лочит, а в конце освобождает мьютекс.
Лови первый попавшийся пример
 

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Гм, но в этом примере синхронизация процессов внутри одной программы, а надо чтоб хоть десять запущенных с разных терминалов (в том числе и удаленных) синхронизировались
Может такое мьютекс? А именованный семафор запросто
Собственно, даже семафор избыточен, там еще более простой метод подсказали, без семафоров.
 
  • Спасибо
Реакции: ~RA~

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472
Коли тема "Различные вопросы…", добавлю свой.
Как в первые 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?
 
Последнее редактирование:

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472
Решение найдено, спасибо @_MBK_!
echo -n "$checksum" | xxd -r -p | dd of=/path/to/file conv=notrunc
 
  • Спасибо
Реакции: _MBK_

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Чем больше я думаю над задачей, тем больше мне кажется, что я хочу странного, но, мало, ли, может решение есть или хотя бы нечто похожее?
Есть программа с графическим интерфейсом (не иксовым) Нужно, чтобы в какой то момент из нее запускалась новая консоль, не отображаемая на основном экране, но отображаемая на удаленном рабочем столе, в которой, в свою очередь, запускались какие-то приложения. Звучит дико?
 

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Ну не спорю, возможно и так.
Предложи тогда, как упростить задачу, чтобы она стала решаемой.
Мне надо в качестве задачи-минимум иметь программу, выводящую данные на рабочий графический экран и служебную информацию в консоль (или несколько консолей) на удаленном рабочем столе.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472
Я, похоже, не вполне понимаю задумку… но нельзя ли, чтобы программа выводила служебную информацию хоть куда, а с удалённой машины просто читать этот вывод?
 

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Я, похоже, не вполне понимаю задумку… но нельзя ли, чтобы программа выводила служебную информацию хоть куда, а с удалённой машины просто читать этот вывод?
Вооот! Именно это и надо! Как сделать чтоб программа выводила данные не на основной экран консоли, с которой она запущена, а в некую невидимую консоль, видную только с удаленной машины?
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Не, ну это совсем некошерно.
Вдобавок, руками с удаленной машины придется запускать эту самую программу, которая бы читала и выводила, а надо чтобы по автомату.
Неужели нет прямого решения?
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472
На удалённой машине по-любому придётся что-то запускать. А писать, можно и не в файл, конечно, но в него проще;. ;)
 

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Ну да, понятно, семафорчики там всякие
Но все равно, неужели нет прямого решения? *(
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 951
Реакции
3 472
  • Спасибо
Реакции: _MBK_

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Спасибо, покурю rsyslog, хотя, конечно, я надеялся, что можно как то работать с несколькими терминалами, печальбеда. *(
Попробую как обычно, еще ЛОР помучить, может там что подскажут.
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Вооот! Именно это и надо! Как сделать чтоб программа выводила данные не на основной экран консоли, с которой она запущена, а в некую невидимую консоль, видную только с удаленной машины?
Если я правильно понимаю, то дикости здесь нет. Идёт же переназначение ввода-вывода на другую консоль (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-клиенты, натравленные на сервер, получат результат работы.
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
Неа, все равно не понял.
При помощи этой штуки как то можно с удаленной машины эту самую tty3 смотреть?
На ЛОРе меня раскритиковали, похоже все таки я странного хочу, предлагают тоже курить syslog и nohup *(
 

kstati

иɯɐɯɔʞ
10 лет на форуме
Сообщения
1 138
Реакции
512
Неа, все равно не понял.
При помощи этой штуки как то можно с удаленной машины эту самую 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_

_MBK_

Пикирующий бомбардировщик
Топикстартер
15 лет на форуме
Сообщения
33 235
Реакции
10 852
О, класс, интересная идея, покурю и ее! 'cooll)'
 
Статус
Закрыто для дальнейших ответов.