2013-08-10 4 views
-1

Я написал свой код для написания номера для соединения в linux. это как указано ниже, но оно показывает ошибки, может ли кто-нибудь помочь мне в этом.Interprocess communication using pipe in Linux

В общем случае заявление о проблеме для программы выглядит следующим образом: - Одна программа откроет трубу, напишите номер в трубку. - Другая программа откроет тот же самый канал, будет читать номер и печатать их. - Закройте оба трубы

int main() 
{ 

int number; 




FILE *fout; 

fout = popen(" ","w"); 



pclose(fout); 

return 0; 

} 

Теперь мой вопрос, какая команда я должен дать в опции POPEN команды (как показано выше пустой), так как я могу идти дальше и написать номер для трубы.

+0

У вас есть две разные программы, или же программу порождая процесс и сообщающийся по трубам? –

+0

Вопрос очень похож на http://stackoverflow.com/q/18087047/841108! –

ответ

1

Сначала создайте именованный канал, используя команду mknod. mknod pipe p. Затем читать и писать с использованием функций, как если бы они были файлами. Узел также может быть создан с помощью кода, используя функцию mknod. Ищите код ошибки EEXIST. Дополнительная информация здесь. http://linux.die.net/man/2/mknod

+0

Я не думаю, что упражнение касается именованных каналов, то есть FIFO, но о 'pipe (2)' –

+0

Я предполагаю, что 'pipe' используется там, где родительский forks дочерний элемент, и оба из них получают доступ к каналу, как родителям, так и дочерним , один конец трубы закрыт, в зависимости от требований. Я запутался в термине 'program' вместо' process', подумал, что это два разных исполняемых и так называемых именованных канала. 'Одна программа откроет трубу, напишет номер в трубку. - Другая программа откроет тот же самый канал, будет читать номер и распечатать его ' –

1

Вы плохо разбираетесь в том, как работают МПК и трубы; пожалуйста, прочитайте хорошую книгу: Advanced Linux Programming имеет несколько глав по этим вопросам.

У нас нет часов, чтобы объяснить сложные концепции, на которые распространяются такие хорошие книги. Потратьте несколько часов, чтобы прочитать их!

Функция библиотеки popen(3) выполняет команду. Вероятно, у вас нет команды p в вашей системе. Я думаю, fp NULL и errno установлен.

popen использует pipe(2), fork(2), dup2(2), execve(2) и /bin/sh -c т.д.