<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; bidirectional pipe]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=11654</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=11654&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «bidirectional pipe».]]></description>
		<lastBuildDate>Tue, 08 Mar 2011 17:18:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: bidirectional pipe]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=153990#p153990</link>
			<description><![CDATA[<p>1) завершать строки, которые посылаете /n<br />2) в потомке вынести инициализацию r_stream. w_stream и buf из цикла.</p>]]></description>
			<author><![CDATA[null@example.com (Fat-Zer)]]></author>
			<pubDate>Tue, 08 Mar 2011 17:18:34 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=153990#p153990</guid>
		</item>
		<item>
			<title><![CDATA[bidirectional pipe]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=153629#p153629</link>
			<description><![CDATA[<p>Пытаюсь сделать так, чтоб родительский и дочерний процесс общались чз пайп<br /></p><div class="codebox"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;unistd.h&gt;
#include &lt;wait.h&gt;

#include &lt;stdio.h&gt;

#define FD_READ_END 0
#define FD_WRITE_END 1


int p2c[2];
int c2p[2];


int main()
{
    pipe(p2c);
    pipe(c2p);
    pid_t cpid;
    if ((cpid = fork()) == 0)
    {
        close(p2c[FD_WRITE_END]);
        close(c2p[FD_READ_END]);
        for (int i=0; i&lt;5; ++i)
        {
            FILE *r_stream = fdopen(p2c[FD_READ_END], &quot;r&quot;);
            FILE *w_stream = fdopen(c2p[FD_WRITE_END], &quot;w&quot;);
            char buf[1024];
            fprintf(stdout, &quot;CHILD: waiting for request from parent\n&quot;);
            fflush(stdout);
            fgets(buf, sizeof(buf), r_stream);
            fprintf(stdout, &quot;CHILD: geted request from parent \&quot;%s\&quot;\n&quot;, buf);
            fprintf(stdout, &quot;CHILD: sending reply\n&quot;);
            fflush(stdout);
            fprintf(w_stream, &quot;reply on mes - %s&quot;, buf);
            fflush(w_stream);
        }
    }
    else
    {
        close(p2c[FD_READ_END]);
        close(c2p[FD_WRITE_END]);

        FILE *r_stream = fdopen(c2p[FD_READ_END], &quot;r&quot;);
        FILE *w_stream = fdopen(p2c[FD_WRITE_END], &quot;w&quot;);
        char buf[1024];
        for (int i=0; i&lt;5; ++i)
        {
            fprintf(stdout, &quot;PARENT: send to children mes #%d\n&quot;, i+1);
            fflush(stdout);
            fprintf(w_stream, &quot;mes #%d from parent&quot;, i+1);
            fflush(w_stream);
            fprintf(stdout, &quot;PARENT: waiting for reply on mes #%d\n&quot;, i+1);
            fflush(stdout);
            fgets(buf, sizeof(buf), r_stream);
            fprintf(stdout, &quot;PARENT: geted reply from children on mes #%d: \&quot;%s\&quot;\n&quot;, i+1, buf);
            fflush(stdout);
        }
    }
    int status;
    wait(&amp;status);
    return 0;
}</code></pre></div><p>Но дочерний процесс блокируется на строчке чтения данных от родителя, а родитель на строчке чтения данных от потомка. После каждой записи вызываю fflush, вроде все должно работать. Что не так?</p>]]></description>
			<author><![CDATA[null@example.com (unk)]]></author>
			<pubDate>Mon, 07 Mar 2011 23:10:11 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=153629#p153629</guid>
		</item>
	</channel>
</rss>
