2010-11-14 8 views
2

Я пытаюсь использовать именованные каналы в C, и я сталкиваюсь с некоторыми трудностями. Что касается анонимных труб, я просто создаю канал с дескрипторами r/w, а затем закрываю противоположный конец каждый раз, когда хочу читать или писать. Это легко сделать, так как я могу просто открывать() и закрывать() другой конец каждый раз.Именованные трубы в c

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

Thanks

+0

Ваш вопрос не ясен. 'open' никогда не используется с обычными (анонимными) трубами, поэтому мне интересно, делаете ли вы то, что думаете, что делаете. –

+0

Возможно, вам не хватало того, что fifo нужно открывать с обоих концов одной записью и другим чтением. Любой вызов чтения/записи на fifo блокируется. Страница руководства находится здесь http://linux.die.net/man/3/mkfifo. В противном случае вы не задаете вопрос, просто заявляя о своей проблеме. Какой код содержит ваше письменное и что вызывает ваше замешательство? – vpit3833

+2

Прочтите [Руководство Beej по Unix IPC] (http://beej.us/guide/bgipc/). – pmg

ответ

2

Нет ничего особенного. Используйте mkfifo для создания канала, а затем ваши процессы читают и записывают на него, как любой файл. Это тоже не C. Вы можете сделать это:

mkfifo testfifo

кошка testfifo

А потом в другом окне

эхо "Привет, мир"> testfifo

4

После того, как труба была создана с mkfifo() (что могло быть сделано в любой момент в прошлом - именованные каналы существуют в файловой системе до тех пор, пока они не будут отсоединены), сторона чтения откроет ее с помощью open("/path/to/pipe", O_RDONLY), а сторона записи откроет ее с помощью open("/path/to/pipe", O_WRONLY).

После этого его можно использовать как анонимную трубу.

0

Я думаю, вы должны просто использовать трубы, потому что они регулируют передачу данных между различными процессами, независимо от времени каждый proccess принимает

Смежные вопросы