<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Трубопровод между нитями в Linux</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html</link>
    <description>Задача: UDP сервер, на двух тредах.&lt;br&gt;Для взаимодействия между тредами решили использовать pipe();&lt;br&gt;&lt;br&gt;1-й тред: Слушает UDP сокет, по приходу данных пишет в трубу.&lt;br&gt;2-й тред: Считывает из другого конца трубы, и пишет буфер.&lt;br&gt;&lt;br&gt;Ниче не работает. &lt;br&gt;С синтаксисом и типами всё в порядке. &lt;br&gt;&lt;br&gt;Запор на второй итерации  while (1)  в udp_thread. &lt;br&gt;Запор решается с помощью poll(), тогда появляется &lt;br&gt;запор в read(), говорит не верный дискриптор. &lt;br&gt;&lt;br&gt;Много артефактов, сокращал для понимания на форуме... &lt;br&gt;&#091;code&#093;&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;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;#include &amp;lt;netdb.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt;&lt;br&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br&gt;#include &amp;lt;errno.h&amp;gt;&lt;br&gt;#include &amp;lt;pthread.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br&gt;#include &amp;lt;netinet/in.h&amp;gt;&lt;br&gt;&lt;br&gt;#define UDP_BUFF_SZ (2 &amp;lt;&amp;lt;  8) /*  256b   */&lt;br&gt;#define PACKET_SIZE (2 &amp;lt;&amp;lt; 5) /*   32Kb  */&lt;br&gt;&lt;br&gt;/* Global pipe */&lt;br&gt;int pipefd&#091;2&#093; = &#123;EOF, EOF&#125;;&lt;br&gt;&lt;br&gt;/* for setsockopt */&lt;br&gt;const unsigned long value = PACKET_SIZE;&lt;br&gt;&lt;br&gt;/* считать ровно 32 кб из pipefd&#091;0&#093; , в буфер */&lt;br&gt;void </description>

<item>
    <title>Трубопровод между нитями в Linux (аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#6</link>
    <pubDate>Tue, 23 Mar 2010 02:21:14 GMT</pubDate>
    <description>Нахрена тебе shm? Shm - для связи между процессами, а между потоками вся память общая автоматически.&lt;br&gt;</description>
</item>

<item>
    <title>Трубопровод между нитями в Linux (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#5</link>
    <pubDate>Sat, 20 Mar 2010 22:25:28 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt;Для взаимодействия между тредами решили использовать pipe(); &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Зачем? Треды на то и создани, что у них shared resources и &lt;br&gt;&amp;gt;т.д. Pipe - это классический System V IPC дотредовских времен (там &lt;br&gt;&amp;gt;же семафоры и т.п.) &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Если у вас треды, пользуйтесь тем, что, у дла них нативного есть; &lt;br&gt;&amp;gt;если у вас fork()+exec(), тогда и pipe() подойдет. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;WWell, &lt;br&gt;&lt;br&gt;Во, нарыл!!! &lt;br&gt;&lt;br&gt;http://mij.oltrelinux.com/devel/unixprg/#ipc__posix_shm&lt;br&gt;&lt;br&gt;C вторника займусь...&lt;br&gt;</description>
</item>

<item>
    <title>Трубопровод между нитями в Linux (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#4</link>
    <pubDate>Sat, 20 Mar 2010 22:09:00 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Для взаимодействия между тредами решили использовать pipe(); &lt;br&gt;&amp;gt;Зачем? Треды на то и созданы, что у них shared resources и &lt;br&gt;&lt;br&gt;Я уж, подумывал,... сейчас на две недели на другую тему переключён,...&lt;br&gt;&lt;br&gt;SHARED это которые:&lt;br&gt;&lt;br&gt;void *shmat(int, const void *, int);&lt;br&gt;int   shmctl(int, int, struct shmid_ds *);&lt;br&gt;int   shmdt(const void *);&lt;br&gt;int   shmget(key_t, size_t, int);&lt;br&gt;&lt;br&gt;... как я понял, они переползли в Linux из IRIX... &lt;br&gt;Я раньше никогда не писал софтину для массивного межпроцессного обмена.&lt;br&gt;На многонитьевых вполне обходились флагами, семафорами, глобальной переменной, и т.п.&lt;br&gt;&lt;br&gt;&amp;gt; Pipe - это классический System V IPC дотредовских времен (там же семафоры и т.п.) &lt;br&gt;&amp;gt;Если у вас треды, пользуйтесь тем, что, у для них нативного есть; &lt;br&gt;&amp;gt;если у вас fork()+exec(), тогда и pipe() подойдет. &lt;br&gt;&lt;br&gt;ну от UDP не отделаюсь, хотя в обозримом будущем может SCTP ... ладно, не об этом...&lt;br&gt;&lt;br&gt;Алгоритма: &lt;br&gt;&lt;br&gt;1. poll/select - ждут данных на порту.&lt;br&gt;2. получили, считали ....&lt;br&gt;&lt;br&gt;Далее надо писать данные в shared memory или &lt;br&gt;на делат</description>
</item>

<item>
    <title>Трубопровод между нитями в Linux (Mr. Mistoffelees)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#3</link>
    <pubDate>Sat, 20 Mar 2010 21:33:50 GMT</pubDate>
    <description>Привет,&lt;br&gt;&lt;br&gt;&amp;gt;Для взаимодействия между тредами решили использовать pipe(); &lt;br&gt;&lt;br&gt;Зачем? Треды на то и создани, что у них shared resources и т.д. Pipe - это классический System V IPC дотредовских времен (там же семафоры и т.п.)&lt;br&gt;&lt;br&gt;Если у вас треды, пользуйтесь тем, что, у дла них нативного есть; если у вас fork()+exec(), тогда и pipe() подойдет.&lt;br&gt;&lt;br&gt;WWell,&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Трубопровод между нитями в Linux (svn)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#2</link>
    <pubDate>Wed, 17 Mar 2010 12:47:06 GMT</pubDate>
    <description>dup2 в цикле зачем?&lt;br&gt;</description>
</item>

<item>
    <title>Трубопровод между нитями в Linux (asdasd)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8651.html#1</link>
    <pubDate>Wed, 17 Mar 2010 12:12:32 GMT</pubDate>
    <description>попробуй использовать socketpair+select&lt;br&gt;</description>
</item>

</channel>
</rss>
