<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I am using 4.9.4 on a Coldfire 5282.</div><div><br></div>I need to do a non-blocking read on stdin in my telnet process. I have done the following, but the getchar blocks.<div><br></div><div>init.c:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">     </span>ShellInit();<span class="Apple-tab-span" style="white-space:pre">                                </span>/* set up the necessary queues etc */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">    </span>rtems_bsdnet_initialize_network();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>rtems_telnetd_initialize(Shell, <span class="Apple-tab-span" style="white-space:pre">    </span><span style="color: #2d9472">/* "shell" function */</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                </span>NULL, <span class="Apple-tab-span" style="white-space:pre">                              </span></span>/* no context necessary for echoShell */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">             </span>false,<span class="Apple-tab-span" style="white-space:pre">                      </span> <span class="Apple-tab-span" style="white-space:pre">   </span></span>/* true == remain on console */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                                              </span></span>/* false == listen on sockets */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span>RTEMS_MINIMUM_STACK_SIZE * 20, <span class="Apple-tab-span" style="white-space:pre">     </span><span style="color: #2d9472">/* shell needs a large stack */</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">         </span>SHELL_TASK_PRIO, <span class="Apple-tab-span" style="white-space:pre">           </span></span>/* priority */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">               </span>false <span class="Apple-tab-span" style="white-space:pre">                              </span></span>/* false = <span style="text-decoration: underline">telnetd</span> does NOT ask for password */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                                                </span></span>/* true = <span style="text-decoration: underline">telnetd</span> asks for password */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">                                         </span></span>/* RTEMS Shell always asks for user/<span style="text-decoration: underline">passwd</span> */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span>);</div><div><br></div><div>shell.c:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span style="color: #a20068"><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span style="color: #a20068">void</span> Shell( <span style="color: #a20068">char</span> *pty_name, <span style="color: #a20068">void</span> *cmd_arg) {</div><div><span class="Apple-style-span" style="font-family: Monaco; font-size: 10px; "><span class="Apple-tab-span" style="white-space:pre">       </span></span><span class="Apple-style-span" style="font-family: Monaco; font-size: 10px; ">char inCh;</span></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span style="color: #a20068"><span class="Apple-tab-span" style="white-space:pre">     </span>struct</span> termios oldt, newt;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">  </span><span style="color: #a20068">int</span> oldf;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #a20068">if</span> (<span style="color: #822a94">tcgetattr</span>( STDIN_FILENO, &oldt)) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">           </span>rtems_panic(<span style="color: #3c00ff">"bad </span><span style="text-decoration: underline ; color: #3c00ff">tcgetattr</span><span style="color: #3c00ff">"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span>newt = oldt;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span>newt.<span style="color: #0000cf">c_lflag</span> &= ~(ECHO | ICANON);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(45, 148, 114); "><font class="Apple-style-span" color="#000000"><font class="Apple-style-span" color="#2D9472"><br></font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #a20068">if</span> (<span style="color: #822a94">tcsetattr</span> (STDIN_FILENO, TCSANOW, &newt) < 0) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(60, 0, 255); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">              </span>rtems_panic(</span>"bad tcsetattr"<span style="color: #000000">);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span>oldf = <span style="color: #822a94">fcntl</span>( STDIN_FILENO, F_GETFL, 0);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #822a94">fcntl</span>( STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; "><span class="Apple-tab-span" style="white-space:pre">     </span>for (;;) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">               </span>inCh = <span style="color: #822a94">getchar</span>();</div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span>if (inCh == EOF) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                       </span>return;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span>} else {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                 </span>printf(".");</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">           </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">}</div><div><br></div><div>The Shell gets fired up on the telnet call, but the getchar blocks until it receives ^D (terminates telnet if it is the first character in a line), ^J, or ^M. I've tried various versions of this code, setting VMIN and VTIME to 0 and 1, but no go.</div><div><br></div><div>Any ideas?</div>
<br></div><div>Thanks,</div><div>Andrei</div></body></html>