<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Чтение из Com порта под linux</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/6191.html</link>
    <description>Есть такая программка, которая читает данные из com порта и выводит данные в std.&lt;br&gt;Вот ее код&lt;br&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/time.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;&lt;br&gt;int open_port(void);&lt;br&gt;&lt;br&gt;int main(void)&lt;br&gt; &#123;&lt;br&gt;    fd_set rfds;&lt;br&gt;    struct timeval tv;&lt;br&gt;    int retval, fd, k, p, bufsize;&lt;br&gt;int buf_size = 10;&lt;br&gt;char buf&#091;buf_size&#093;;&lt;br&gt;&lt;br&gt;    /* Следим ввели ли что-либо. */&lt;br&gt;    fd=open_port();&lt;br&gt;FD_ZERO(&amp;rfds);&lt;br&gt;    FD_SET(fd, &amp;rfds);&lt;br&gt;    &lt;br&gt;    tv.tv_sec = 15;/* Сколько секунд ждем. */&lt;br&gt;    tv.tv_usec = 0;&lt;br&gt;    &lt;br&gt;    retval = select(fd+1, &amp;rfds, NULL, NULL, &amp;tv);&lt;br&gt;    /* На значение tv в данный момент полагаться нельзя! */&lt;br&gt;&lt;br&gt;    if (retval)&lt;br&gt;&#123;&lt;br&gt;        printf(&quot;Данные доступны.&#092;n&quot;);&lt;br&gt;/* FD_ISSET(0, &amp;rfds) will be true. */&lt;br&gt;    k= read(fd,buf,buf_size);&lt;br&gt;if (k&amp;gt;0)&lt;br&gt;&#123;std::cout&amp;lt;&amp;lt;&quot;Полезные символы &quot;;&lt;br&gt;for (int j=0; j&amp;lt;k ;j++)&lt;br&gt;&#123;&lt;br&gt;std::cout&amp;lt;&amp;lt;buf&#091;j&#093;;&lt;br&gt;&#125;&lt;br&gt;&#125;&lt;br&gt;&#125;&lt;br&gt;else&lt;br&gt;        &#123;printf(&quot;Нет данных в течение 15 секунд.&#092;n&quot;);&#125;&lt;br&gt;close(fd);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt; int  op</description>

<item>
    <title>Чтение из Com порта под linux (serge)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/6191.html#4</link>
    <pubDate>Mon, 02 Mar 2009 10:11:06 GMT</pubDate>
    <description>&amp;gt;&amp;gt;честно - лень мне. это же элементарно, Ватсон! &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Холмсу может быть и элементарно, но он всегда объяснял Ватсону как достиг &lt;br&gt;&amp;gt;результата. &lt;br&gt;&amp;gt;Если нетрудно напишите пример. &lt;br&gt;&amp;gt;Сам я месяц буду разбираться. &lt;br&gt;&lt;br&gt;Нужно установить неканонический ввод.&lt;br&gt;Цитата &quot;Неканонический ввод не обрабатывается. Вводимый символ передается без изменений, так как он был принят. В основном вы сбрасываете опции ICANON, ECHO, ECHOE и ISIG приустановке неканонического ввода: &lt;br&gt;options.c_lflag &amp;= ~(ICANON &amp;#124; ECHO &amp;#124; ECHOE &amp;#124; ISIG);&quot;&lt;br&gt;Подробнее - http://cisco.opennet.ru/docs/RUS/serial_guide/index.html#2_5_2&lt;br&gt;</description>
</item>

<item>
    <title>Чтение из Com порта под linux (nkly)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/6191.html#3</link>
    <pubDate>Thu, 22 Feb 2007 11:37:49 GMT</pubDate>
    <description>&amp;gt;честно - лень мне. это же элементарно, Ватсон! &lt;br&gt;&lt;br&gt;Холмсу может быть и элементарно, но он всегда объяснял Ватсону как достиг результата.&lt;br&gt;Если нетрудно напишите пример.&lt;br&gt;Сам я месяц буду разбираться.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Чтение из Com порта под linux (perece)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/6191.html#2</link>
    <pubDate>Thu, 22 Feb 2007 09:39:05 GMT</pubDate>
    <description>забыл напомнить: смешивать write(1, ...) и всякие printf, putchar, etc. надо крайне осторожно, вставляя fflush(stdout) во все места, где write используется _после_ stdioшных функций. иначе можно получить весьма непредсказуемый вывод...&lt;br&gt;&lt;br&gt;&#092;^P^/&lt;br&gt;</description>
</item>

<item>
    <title>Чтение из Com порта под linux (perece)</title>
    <link>https://opennet.dev/openforum/vsluhforumID9/6191.html#1</link>
    <pubDate>Thu, 22 Feb 2007 09:33:45 GMT</pubDate>
    <description>&amp;gt;   &#123; std::cout&amp;lt;&amp;lt;&quot;Полезные символы &quot;; &lt;br&gt;&amp;gt;    for (int j=0; j&amp;lt;k ;j++) &lt;br&gt;&amp;gt;     &#123; &lt;br&gt;&amp;gt;     std::cout&amp;lt;&amp;lt;buf&#091;j&#093;; &lt;br&gt;&amp;gt;     &#125; &lt;br&gt;&amp;gt;   &#125; &lt;br&gt;&amp;gt;  &#125; &lt;br&gt;&amp;gt; else &lt;br&gt;&amp;gt;        &#123;printf(&quot;Нет данных в течение &lt;br&gt;&#091;...&#093;&lt;br&gt;&amp;gt; Как сделать так чтобы программа сразу же выводила полученный символ, а &lt;br&gt;&amp;gt;не ждала когда придет символ перевода строки? &lt;br&gt;&amp;gt;В перспективе мне нужно выводить не на экран а обрабатывать полученные данные &lt;br&gt;&amp;gt;в программе. &lt;br&gt;выводить правильно. не очень понятно, почему в одном случае std::cout&amp;lt;&amp;lt;, а в другом printf. но не годится ни то, ни другое. только write(1,&amp;buf&#091;j&#093;,1);&lt;br&gt;(или fflush(stdout) после каждого printf/putchar/... , но это крайне неэффективно. как fflush c std::cout&amp;lt;&amp;lt; соотносится ваще не знаю, мож и не будет работать. можно еще попробовать setbuf(stdout,NULL); - для упрощения себе жизни, и использовать putchar. но и это ИМХО криво)&lt;br&gt;&amp;gt;Если можно рабочий пример.&lt;br&gt;честно - лень мне. это же элементарно, Ватсон!&lt;br&gt;&lt;br&gt;&#092;^P^/&lt;br&gt;</description>
</item>

</channel>
</rss>
