我想在linux上给串口设置中断,所以我是通过signal实现的,signal的handler有写,但是不知道字符个数怎么取,具体第三个我不太清楚系统调用处理程序时 read() 函数中的参数。因此,我需要一个知道串行数据量的解决方案。
谢谢大家
PS:我英文不好,所以上面的可能表达不清楚
void serialHandler(int sig)
{
read(fd,buffer,I don't know);
}
最佳答案
具体来说,当处理程序被系统调用时,我不确定 read() 函数中的第三个参数
read() 在此处进行了完整描述,并包括以下示例:
#include <sys/types.h>
#include <unistd.h>
...
char buf[20];
size_t nbytes;
ssize_t bytes_read;
int fd;
...
nbytes = sizeof(buf);
bytes_read = read(fd, buf, nbytes);
在测试 read 的输出以获取退出条件时,通常会使用循环结构(例如围绕与上面显示的类似代码)。在上面的实现中(未循环)bytes_read
包含成功读取的字节数,不包括删除的任何回车符。如果遇到读取错误或文件结束 (EOF
),则返回值可能小于 number_ofBytes 参数中指定的值。如果发生错误,read 返回 0 并将 errno
设置为非零值。
注意:如评论中所述,将 read()
与串行端口结合使用很可能会阻止它看到 EOF
条件。
同时对关于的评论进行阐述using timeouts with read() ,以及如何 implement a timeout for the read function itself using the select() 功能。
还有更多 information here 帮助创建从端口读取的算法。
关于c - 如何在 Linux 上设置串口中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54404216/