c - 如何在 Linux 上设置串口中断?

标签 c linux unix serial-port posix

我想在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/

相关文章:

linux - Unix:最后一个命令 - 如何执行文件输入的子命令?

unix - 有没有办法获得有关 Unix 进程的非常精确的信息(使用的字节数、CPU 指令数)?

c - 我真的不知道从哪里开始

C语言: buffer size, 为什么当输入超过缓冲区大小时仍然有效?

linux - 如何执行logstash? (发生了错误)

c++ - 将 Linux 兼容项目从 Windows 移植到 Linux

c - Lua - 将表获取到 C,更新它并将其上传回来

c - 系统调用 open()

linux - 在 Ubuntu 64 上运行 ELF 64 位 LSB 可执行文件

unix - 检查当前时间是否在 UNIX 上定义的时间范围内