C 如何在linux上设置串行中断?

C 如何在linux上设置串行中断?,c,linux,unix,serial-port,posix,C,Linux,Unix,Serial Port,Posix,我想在linux上为串行端口设置中断,所以我是通过信号来设置的。信号的处理程序已经编写好了,但我不知道如何获取字符数。具体来说,我不确定系统调用处理程序时read()函数中的第三个参数。因此,我需要一个知道串行数据量的解决方案 谢谢大家 PS:我的英语不好,所以上面可能表达不清楚 void serialHandler(int sig) { read(fd,buffer,I don't know); } 具体地说,当系统调用处理程序时,我不确定read()函数中的第三个参数 此处对其进行

我想在linux上为串行端口设置中断,所以我是通过信号来设置的。信号的处理程序已经编写好了,但我不知道如何获取字符数。具体来说,我不确定系统调用处理程序时read()函数中的第三个参数。因此,我需要一个知道串行数据量的解决方案

谢谢大家

PS:我的英语不好,所以上面可能表达不清楚

void serialHandler(int sig)
{
    read(fd,buffer,I don't know);
}
具体地说,当系统调用处理程序时,我不确定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);
#包括
#包括
...
char-buf[20];
大小n字节;
ssize_t字节_u u读取;
int-fd;
...
nbytes=sizeof(buf);
字节\读取=读取(fd、buf、nbytes);
在测试read的输出是否符合退出条件时,通常会使用循环构造(例如,与上面显示的代码类似的代码)。在上述实现中(非循环)
bytes\u read
包含成功读取的字节数,不包括删除的任何回车字符。如果遇到读取错误或文件结尾(
EOF
),则返回的值可以小于在“字节数”参数中指定的值。如果发生错误,read返回0并将
errno
设置为非零值

注意:如注释中所述,将
read()
与串行端口一起使用很可能会排除出现
EOF
情况的可能性

并阐述了该评论,以及如何发挥作用


创建从端口读取的算法还有很多帮助。

第三个参数取决于您期望的数据量和传递到
read()
(无论是多少)的缓冲区大小。听起来您需要
aio\u read
,它使用缓冲区和指定的大小限制设置读取,并在读取完成时向您发送信号。一旦出现这种情况,
aio\u return
会告诉您实际传输了多少字节。或者将文件描述符设置为非阻塞。然后read将返回有多少个字符。然而,值得一提的是,串行端口上的read通常不会返回EOF。数据的长度和结尾必须由某种帧协议来确定。嗯,我的语句似乎有问题。我的意思是,例如,三个字节来自串行端口,但我不知道是三个,如果我将第三个参数设置为一,将丢失两个字节。@buyuer这些字节没有丢失,您可以在随后调用
read()
@Ctx时阅读它们。非常感谢,我似乎明白了,我知道我应该做什么。再次感谢您。