<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Непонятки с fork</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html</link>
    <description>Есть простенькая программка&lt;br&gt;&lt;br&gt;#include&amp;lt;stdio.h&amp;gt;&lt;br&gt;#include&amp;lt;unistd.h&amp;gt;&lt;br&gt;&lt;br&gt;int main ()&lt;br&gt;&#123;&lt;br&gt;    int i;&lt;br&gt;&lt;br&gt;    for (i = 0; i &amp;lt; 2; i ++) &#123;&lt;br&gt;        fork();&lt;br&gt;        printf (&quot;+&quot;);&lt;br&gt;    &#125;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Никак не могу понять, почему выводится 8 плюсов?&lt;br&gt;</description>

<item>
    <title>Непонятки с fork (AHAHAC)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#10</link>
    <pubDate>Sat, 23 Jul 2011 18:51:35 GMT</pubDate>
    <description>&amp;gt; Немножко поэкпериментровал. Если написать &lt;br&gt;&amp;gt; printf (&quot;+&quot;); &lt;br&gt;&amp;gt; fflush(stdout); &lt;br&gt;&amp;gt; или &lt;br&gt;&amp;gt; write(fileno(stdout), &quot;+&quot;, 1); &lt;br&gt;&amp;gt; то выподится 6 плюсов, как и должно быть. Да, буферизация в printf &lt;br&gt;&amp;gt; приводит к таким непредвиденным результатам. Будте внимательны, коллеги :-) &lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;&#123;&lt;br&gt;        int i;&lt;br&gt;&lt;br&gt;        setbuf(stdout, NULL);&lt;br&gt;&lt;br&gt;        for (i = 0; i &amp;lt; 2; i++) &#123;&lt;br&gt;                fork();&lt;br&gt;                printf(&quot;+&quot;);&lt;br&gt;        &#125;&lt;br&gt; return 0;&lt;br&gt;&#125;&#091;/code&#093;&lt;br&gt;&lt;br&gt;И ваще &lt;br&gt;&#091;code&#093;&lt;br&gt;int main() &#123; return write(1, &quot;++++++&quot;, 6); &#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (AHAHAC)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#9</link>
    <pubDate>Sat, 23 Jul 2011 18:36:17 GMT</pubDate>
    <description>&amp;gt; И, кстати, когда процессы умирают? И кто их убивает?&lt;br&gt;&lt;br&gt;А зачем их убивать, если они умирают. Некрофаг чтоля? :)&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (CR)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#8</link>
    <pubDate>Fri, 22 Jul 2011 16:31:17 GMT</pubDate>
    <description>Немножко поэкпериментровал. Если написать&lt;br&gt;&lt;br&gt;printf (&quot;+&quot;);&lt;br&gt;fflush(stdout);&lt;br&gt;&lt;br&gt;или&lt;br&gt;&lt;br&gt;write(fileno(stdout), &quot;+&quot;, 1);&lt;br&gt;&lt;br&gt;то выподится 6 плюсов, как и должно быть. Да, буферизация в printf приводит к таким непредвиденным результатам. Будте внимательны, коллеги :-)&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (elvenic)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#7</link>
    <pubDate>Fri, 22 Jul 2011 16:13:55 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Попробуйте вот так и немного подумайте над результатом :) &lt;br&gt;&amp;gt; В данном случае всё понятно, как и ожидалось 6 плюсов. Но откуда &lt;br&gt;&amp;gt; в моём примере берётся 8 плюсов? Какие-то заморочки с буферизацией что &lt;br&gt;&amp;gt; ли ?&lt;br&gt;&lt;br&gt;Да, вы правы, это сложнее чем мне казалось вначале. &lt;br&gt;&lt;br&gt;И наверно это действительно можно обьяснить буферизацией. Когда потомок форкается, он наследует буфер вывода от родителя, при этом буфер копируется потомку при попытке потомка вывести новый &apos;+&apos;. Теперь есть два буфера, один у родителя, второй у потомка, оба содержат &apos;++&apos;. Ваш первый вариант не выводил &apos;&#092;n&apos; явно, поэтому все буфера выводились в конце работы процесса. Так все потомки, даже те которые по коду программы должны были вывести только один &apos;+&apos;, фактически выводили два, из скопированного от родителя буфера вывода.  &lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (CR)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#6</link>
    <pubDate>Fri, 22 Jul 2011 15:31:49 GMT</pubDate>
    <description>&amp;gt; Какие-то заморочки с буферизацией что ли ?&lt;br&gt;&lt;br&gt;Вот так меняю программу&lt;br&gt;&lt;br&gt;int main ()&lt;br&gt;&#123;&lt;br&gt;    int i;&lt;br&gt;&lt;br&gt;    for (i = 0; i &amp;lt; 2; i ++) &#123;&lt;br&gt;        fork();&lt;br&gt;        printf (&quot; i: &#037;d pid: &#037;d ppid: &#037;d&#092;n&quot;, i, getpid(), getppid());&lt;br&gt;        printf (&quot;+&quot;);&lt;br&gt;    &#125;&lt;br&gt;    return 0;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;вот, что выводит&lt;br&gt;&lt;br&gt; i: 0 pid: 6319 ppid: 4752&lt;br&gt; i: 0 pid: 6320 ppid: 6319&lt;br&gt;+ i: 1 pid: 6319 ppid: 4752&lt;br&gt;++ i: 1 pid: 6320 ppid: 6319&lt;br&gt;++ i: 1 pid: 6322 ppid: 1&lt;br&gt;++ i: 1 pid: 6321 ppid: 1&lt;br&gt;+&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (CR)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#5</link>
    <pubDate>Fri, 22 Jul 2011 15:24:11 GMT</pubDate>
    <description>&amp;gt; Попробуйте вот так и немного подумайте над результатом :) &lt;br&gt;&lt;br&gt;В данном случае всё понятно, как и ожидалось 6 плюсов. Но откуда в моём примере берётся 8 плюсов? Какие-то заморочки с буферизацией что ли ?&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (elvenic)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#4</link>
    <pubDate>Fri, 22 Jul 2011 15:22:20 GMT</pubDate>
    <description>&amp;gt; Для тех кому лень, вот что выводится. Подсказка: Сколько имено процессов мы &lt;br&gt;&amp;gt; запускаем?&lt;br&gt;&amp;gt; + &amp;#124; i: 0 pid: 17247 ppid: 22353 &lt;br&gt;&amp;gt; + &amp;#124; i: 0 pid: 17248 ppid: 17247 &lt;br&gt;&amp;gt; + &amp;#124; i: 1 pid: 17247 ppid: 22353 &lt;br&gt;&amp;gt; + &amp;#124; i: 1 pid: 17248 ppid: 17247 &lt;br&gt;&amp;gt; + &amp;#124; i: 1 pid: 17250 ppid: 1 &lt;br&gt;&amp;gt; + &amp;#124; i: 1 pid: 17249 ppid: 1 &lt;br&gt;&lt;br&gt;И, кстати, когда процессы умирают? И кто их убивает?&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (elvenic)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#3</link>
    <pubDate>Fri, 22 Jul 2011 15:15:16 GMT</pubDate>
    <description>Для тех кому лень, вот что выводится. Подсказка: Сколько имено процессов мы запускаем?&lt;br&gt;&lt;br&gt;+ &amp;#124; i: 0 pid: 17247 ppid: 22353&lt;br&gt;+ &amp;#124; i: 0 pid: 17248 ppid: 17247&lt;br&gt;+ &amp;#124; i: 1 pid: 17247 ppid: 22353&lt;br&gt;+ &amp;#124; i: 1 pid: 17248 ppid: 17247&lt;br&gt;+ &amp;#124; i: 1 pid: 17250 ppid: 1&lt;br&gt;+ &amp;#124; i: 1 pid: 17249 ppid: 1&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Непонятки с fork (elvenic)</title>
    <link>https://mobile.opennet.me/openforum/vsluhforumID9/9195.html#2</link>
    <pubDate>Fri, 22 Jul 2011 15:11:07 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; &#123; &lt;br&gt;&amp;gt;     int i; &lt;br&gt;&amp;gt;     for (i = 0; i &amp;lt; 2; i &lt;br&gt;&amp;gt; ++) &#123; &lt;br&gt;&amp;gt;         fork(); &lt;br&gt;&amp;gt;         printf (&quot;+&quot;); &lt;br&gt;&amp;gt;     &#125; &lt;br&gt;&amp;gt;     return 0; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; Никак не могу понять, почему выводится 8 плюсов?&lt;br&gt;&lt;br&gt;Попробуйте вот так и немного подумайте над результатом :) &lt;br&gt;&lt;br&gt;#include&amp;lt;stdio.h&amp;gt;&lt;br&gt;#include&amp;lt;unistd.h&amp;gt;&lt;br&gt;&lt;br&gt;int main ()&lt;br&gt;&#123;&lt;br&gt;  int i;&lt;br&gt;&lt;br&gt;  for (i = 0; i &amp;lt; 2; i ++) &#123;&lt;br&gt;      fork();&lt;br&gt;      printf (&quot;+ &amp;#124; i: &#037;d pid: &#037;d ppid: &#037;d&#092;n&quot;, i, getpid(), getppid());&lt;br&gt;  &#125;&lt;br&gt;  return 0;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
