我希望使用串行COM端口进行通信,并且希望在每次调用read()函数调用时实现超时.

int filedesc = open( "dev/ttyS0", O_RDWR );

read( filedesc, buff, len );

编辑:

我正在使用Linux操作系统.如何使用select函数调用实现?

推荐答案

Select ()

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>

int main(void)
{
  fd_set set;
  struct timeval timeout;
  int rv;
  char buff[100];
  int len = 100;
  int filedesc = open( "dev/ttyS0", O_RDWR );

  FD_ZERO(&set); /* clear the set */
  FD_SET(filedesc, &set); /* add our file descriptor to the set */

  timeout.tv_sec = 0;
  timeout.tv_usec = 10000;

  rv = select(filedesc + 1, &set, NULL, NULL, &timeout);
  if(rv == -1)
    perror("select"); /* an error accured */
  else if(rv == 0)
    printf("timeout"); /* a timeout occured */
  else
    read( filedesc, buff, len ); /* there was data to read */
  close(filedesc);
}

C++相关问答推荐

在严格的C89模式下,收件箱不会在' uint64_t '上发出警告

为什么在C中设置文件的位置并写入文件,填充空字符?

为什么在C中二维字符数组会有这样的行为?

使用额外的公共参数自定义printf

特定闪存扇区的内存别名

为什么STM32G474RE上没有启用RCC PLL

如何使用指向 struct 数组的指针并访问数组中特定索引处的 struct

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

限制不同类型的限定符

<;unistd.h>;和<;sys/unistd.h>;之间有什么区别?

如何将另一个数组添加到集合中,特别是字符串?

For循环不会迭代所有字符串字符吗?(初学者问题)

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

无法识别C编程语言的语法,如书中所示

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

在吉陀罗中,_2_1_和CONCAT11是什么意思?

可以';t从A9G模块拨打电话

';malloc():损坏的顶部大小';分配超过20万整数后

为什么孤儿进程在 Linux 中没有被 PID 1 采用,就像我读过的一本书中声称的那样?

memcmp 是否保证按顺序比较字节?