Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Передача данных другой программе  (Прочитано 934 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zwart

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Передача данных другой программе
« : 11 Октября 2012, 13:02:08 »
Подскажите, как лучше реализовать следующее. Сначала запускается одна программа и некоторое время ждет данных. Затем запускаются другие программы (не дочерние процессы), которые должны передать небольшие данные (один символ) первой программе и закончить работу. После этого первая программа, получив эти данные, выполняет некоторую работу и закрывается.
Смотрел в сторону pipe, но видел там только для дочерних процессов. Сигналы тоже какое-то сомнение вызывают. Что лучше применить и как, желательно с примерами? В винде такое делал, а тут не знаю.
Программы пишутся на c в gcc.
« Последнее редактирование: 11 Октября 2012, 13:09:39 от zwart »

Оффлайн AzraelKDE

  • Активист
  • *
  • Сообщений: 773
  • Kubuntu/Xubuntu user
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #1 : 11 Октября 2012, 13:11:32 »
Подскажите, как лучше реализовать следующее. Сначала запускается одна программа и некоторое время ждет данных. Затем запускаются другие программы (не дочерние процессы), которые должны передать небольшие данные (один символ) первой программе и закончить работу. После этого первая программа, получив эти данные, выполняет некоторую работу и закрывается.
Смотрел в сторону pipe, но видел там только для дочерних процессов. Сигналы тоже какое-то сомнение вызывают. Что лучше применить и как, желательно с примерами? В винде такое делал, а тут не знаю.
Программы пишутся на c в gcc.
Через dbus. Документацию с примерами гуглим сами.
« Последнее редактирование: 11 Октября 2012, 13:56:38 от AzraelKDE »
Java + HTML5 = Brain explosion.

Оффлайн Дядюшка Ау

  • Участник
  • *
  • Сообщений: 123
  • Дайте две!
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #2 : 11 Октября 2012, 13:52:38 »
А я еще слышал про memory-mapped-files, но в винде. Наверное, в никсах тоже есть
Ubuntu 12.04 для поколупацца, Win7 для поработать

Оффлайн zwart

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #3 : 11 Октября 2012, 14:00:10 »
А я еще слышал про memory-mapped-files, но в винде. Наверное, в никсах тоже есть
Так я в винде их и использовал. А вот тут не знаю. Вообще-то я программы для роутера делаю, не уверен там насчет dbus. Через обычный файл получается медленно и неэффективно, вот если проецируемые в память файлы здесь имеются, то было бы хорошо.

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #4 : 11 Октября 2012, 14:00:15 »
Через dbus. Документацию с примерами гуглим сами.
А гвозди вы тоже микроскопом забиваете? Обычного Unix-сокета хватит с головой.
Если важна скорость, то да, mmap ваше всё.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #5 : 11 Октября 2012, 14:31:07 »
Смотрел в сторону pipe, но видел там только для дочерних процессов.
Плохо смотрели, наверное.
Запустите в первом терминале
mkfifo FIFO1&&cat FIFO1&&echo "end"&&rm FIFO1
Запустите во втором терминале
echo "1" >FIFO1

Оффлайн zwart

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #6 : 11 Октября 2012, 15:43:49 »
Обычного Unix-сокета хватит с головой. Если важна скорость, то да, mmap ваше всё.
Спасибо, наверное, подойдет. mmap нашел с примерами. Сначала его попробую.

Плохо смотрели, наверное. Запустите в первом терминале
Не показатель. У терминала, возможно, дочерние процессы. В функциях pipe, popen и т.д. я не увидел, как можно передать пайп наружу.

Всем спасибо. Должно все получиться.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #7 : 12 Октября 2012, 11:43:16 »
zwart,
mmap оставь на закуску. пусть его пользуют те кто знают что делают.
память замапленную mmap'ом еще защищать и синхронизировать надо.
подключаются семафоры и прочая шушера. пупок развяжется писать.

Сокеты самый простой IPC и самый популярный. Не обязательно UNIX-сокетами пользоваться. можно TCP/IP например. ничуть не сложнее.

А вообще книжка есть У.Стивенс "UNIX: Взаимодействие процессов"

Оффлайн zwart

  • Автор темы
  • Участник
  • *
  • Сообщений: 124
    • Просмотр профиля
Re: Передача данных другой программе
« Ответ #8 : 12 Октября 2012, 14:51:03 »
Сделал с mmap по этому примеру. Сокетами раньше не пользовался, может, если когда еще потребуются, посмотрю.

 

Страница сгенерирована за 0.016 секунд. Запросов: 21.