LINUX.ORG.RU

Взаимодействие независимых процессов


0

0

Доброго времени суток.

Имеется следующая задача: обеспечить передачу строки char * для "неродных" процессов.

Процесс 1: void main (void) { char buff [32]; gets (buff); puts ("I've got a message: "); puts (buff); } Предположим, он просто запускается в терминале.

Процесс 2: Это может быть что-нибудь с функцией print (pid_t PID_1, char * string); или вызов каких-то системных функций для использования общих потоков, или еще что.

Сразу оговорюсь, что команда в терминале ./proc_2 | ./proc_1 не подойдет, поскольку их будут запускать разные пользователи.

Были попытки сделать что-то в духе ps -a | grep proc_1 cd /proc/#proc_1#/fd echo "string" > 1 Но, по-моему, сообщение ушло только в терминал, а не попало на обработку процессом (не вывелось, в общем, ничего)

Подскажите, пожалуйста, каким путем лучше пойти: искать функции, позволяющие найти указатель на stdin другого процесса, или можно найти вход с терминала.

Благодарю за внимание :)

Ммм, хочу поправиться относительно "не вывелось, в общем, ничего". Как-раз строки-то в терминале вывелись. Не появилось только нужных символов после "I've got"...

Correra
() автор топика
Ответ на: комментарий от Correra

Насколько я понял Вам нужно использовать канал FIFO, предварительно перенаправив в него нужные дескрипторы

Chumka ★★★
()

Есть сокет, есть именованый pipe, есть IPC очередь сообщений. Но в любом случае, процесс должен сам или открыть файл, или уже получить при запуске открытый файл вместо stdin/stdout...

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

mky ★★★★★
()
Ответ на: комментарий от krum

Да, спасибо, fifo - решение.

Но пока что работает только если процессы запускать с правами рута, потому что канал создается с 0 правами по умолчанию (p---------)

Можно прямо в программе, открывающей канал, изменить права доступа к созданному fifo командой типа chmod ("a+rwx", "/tmp/fifo"), или необходимо обрабатывать структуру stat * fifo, fifo->st_mode ?

Correra
() автор топика
Ответ на: комментарий от Correra

Почему-то открытие вида ((mknod ("/tmp/fifo", S_IFIFO | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, 0)) == -1) не устанавливает биты доступа для записи для группы владельца и прочих, хотя, например, S_IXOTH и S_IXGRP установить можно. С чем может быть связана ошибка?

Correra
() автор топика
Ответ на: комментарий от Correra

Ошибка была связана с наложение mode на umask, поэтому все-равно пришлось использовать chmod (path,mode);

Задача решена. Всем спасибо за понимание )

Correra
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.