1、可以事先检查一下传递给 read() 函数的 fd 是否合法,即在 'if ((nread = read(fd,myBuff2,strlen(myBuff2)))>0)' 之前判断 if ( fd == NULL ) printf("出错啦!\n");2、read()函数是文件操作函数,在c语言中很重要。函数的返回值如下:(1)如果成功,返回读取的字节数;(...
一些IO系统调用执行时,如 read 等待输入期间,如果收到一个信号,系统将中断read, 转而执行信号处理函数. 当信号处理返回后, 系统遇到了一个问题: 是重新开始这个系统调用, 还是让系统调用失败?早期UNIX系统的做法是, 中断系统调用,并让系统调用失败, 比如read返回 -1, 同时设置 errno 为EINTR中断了的系统调用是没...
返回值是-1,说明才开串口失败。设置了一个char的数组,接受命令有误
51CTO博客已为您找到关于linux 串口read报错返回-1的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及linux 串口read报错返回-1问答内容。更多linux 串口read报错返回-1相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
串口read函数的原型一般为: ssize_t read(int fd, void *buf, size_t count); 其中,fd为打开的串口设备文件描述符,buf为用来存放读取数据的缓冲区,count为需要读取的字节数。该函数会从fd所指向的文件中读取count个字节的数据,存放到buf缓冲区中,并返回实际读取的字节数。如果返回-1,则表示读取失败。
我在打开串口时使用阻塞模式打开,但是没有设置c_cc[VMIN]的值,而它初始化后就是0,所以发现串口没有被阻塞,其实原因就是串口模式还是阻塞模式没错,但是它是超时0秒的状态,所以在没有数据到达时read也返回了。 关于阻塞模式下c_cc[VMIN] 和 c_cc[VTIME]的取值与现象,以下简称为VMIN和VTIME ...
对于read,指当串口输入缓冲区没有数据的时候,read函数立即返回,返回值为-1。 对于write,指当串口输出缓冲区满,或剩下的空间小于将要写入的字节数,则write将进行写操作,写入当前串口输出缓冲区剩下空间允许的字节数,然后返回写入的字节数。 在打开串口文件时,打开模式加上O_NDELAY可以以非阻塞方式打开串口;反之,不...
Linux 串口中的超时设置 //初始化//read调用读到数据则立即返回,否则将为每个字符最多等待 VTIME*100ms 时间.opt.c_cc[VTIME] =1; opt.c_cc[VMIN]=0;//接收//用2个循环实现,第一个循环最多实现 3 次,300ms没有接收到数据则return;//第二个循环继续读后续的字节,每次读1Byte,直到无数据触发100ms...
用write()函数向串口写数据。下面是一个向串口写数据的示例: n = write(fd,buff,len); /* n表示成功写到串口的字节数,如果写入失败则返回-1 fd是打开串口返回的文件描述符 buff表示写入的内容 len表示写入信息的长度。 */ 用read()函数从串口读取数据。下面是一个从串口读数据的示例: ...
第一步: 打开串口 调用open( ) 函数打开串口设备文件,若出错则返回- 1,成功则返回文件句柄。 #define UART1 /dev /ttySAC1 int fd; fd = open( "UART1",O_RDWR) /* 以可读可写方式打开串口设备* / 第二步: 设置串口属性 函数tcsetattr 可以设置串口的结构属性,tcgetatt( ) 可以得到串口的结构属性。