fgets读取串口

时间:2015-03-27 09:59:52

标签: serial-port fgets

我正在使用fgets来连续阅读。如果没有收到任何内容而不是继续等待连续字符,有没有办法从fgets中断?

我有:new_command=getserial();

其中getserial是使用fgets的函数。

这是与其他任务的while循环。我希望程序仍然继续执行,如果没有收到串行字符,如果收到一个串行字符,我想使用break从while循环中断。目前,如果收到串行字符,程序将只继续执行while循环。

我的代码就是这些内容:

while (condition not satisfied)

{

new_command=getserial();

  If (new_command == 0)

  {

  printf("Hello");

  }

  else
  {
     break;
  }
}

所以在我的情况下,如果没有收到串行字符,我想打印你好。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

解决:我使用select()来超时串口。代码如下。

fd_set read_fds, write_fds, except_fds;
FD_ZERO(&read_fds);
FD_ZERO(&write_fds);
FD_ZERO(&except_fds);
FD_SET(fd, &read_fds);

// Set timeout to 1.0 seconds
struct timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;

// Wait for input to become ready or until the time out

bytesRead=select(fd + 1, &read_fds, &write_fds, &except_fds, &timeout);

if (bytesRead == 1)
{
    if (fgets(buf , sizeof(buf) , stdin) != NULL)
    {
        //printf("It is ready for reading");

    }
}
else
{
printf("Timeout Error\n");

}