Как отправить сигнал или данные в программу на C++ из сценария Bash

В вашем конкретном случае

Вы можете использовать следующее правило

sed 's/.//2' sample

, где 2соответствует второму символу.

В качестве примера для фиктивного входного файла с именемtest.txt

qwertyuiop
asdfghjkl
zxcvbnm

вывод команды sed 's/.//2' test.txtравен

qertyuiop
adfghjkl
zcvbnm

Как правило

Вы можете удалить символ Nthшаблона .(, т. е. все символы ), используя

sed 's/.//N' sample
0
09.11.2021, 20:03
1 ответ

Вы можете адаптировать принимающую программу для создания fifo (именованного канала )с хорошо -известным именем пути при запуске и для удаления этого fifo при выходе. Как правило, получатель также открывает тот же fifo для записи, что держит его открытым :каналы без записи, как правило, уведомляют EOF для читателей.

Периодически он может опрашивать FIFO на наличие данных, не застревая в ожидании, когда их нет. Я не занимаюсь C++, но в C вы просто отмечаете fifo O _NONBLOCK --C++ будет иметь аналогичный механизм.

Затем любой другой процесс может проверить, существует ли FIFO (, чтобы он знал, что есть активный считыватель ), и отправить ему некоторый текст, понятный получателю.

Если вы предпочитаете многопоточность блокировке, вы можете создать отдельный поток для чтения блокирующего fifo и выполнять синхронизацию в рамках механизма потоков.

Одна из проблем с сигналами заключается в том, что вам необходимо идентифицировать pid получателя. Использование fifo обеспечивает стабильный метод именования.

Изменить :Прототип проектного решения, которое позволяет любому количеству клиентов отправлять сообщения на сервер через именованный канал с надежными условиями запуска и закрытия. Минус в том, что в Bash :клиент 40 строк, сервер 65 строк.

0
10.11.2021, 13:56

Теги

Похожие вопросы