Cygwin中的串行端口

Cygwin中的串行端口,cygwin,serial-port,Cygwin,Serial Port,我正试图编写一个程序来解释从Cygwin下的串行接口接收到的通信量。我从另一个项目复制了一些演示代码来打开串口。然后我将串口速度设置为串口使用的波特率(921600) 然后我试图在一个文件中捕获流量 if (FD_ISSET(FD_com, &fds)) { // wait for data to come in on the serial port if ((nbytes = read(FD_com, port_buf, PORTBUFS

我正试图编写一个程序来解释从Cygwin下的串行接口接收到的通信量。我从另一个项目复制了一些演示代码来打开串口。然后我将串口速度设置为串口使用的波特率(921600)

然后我试图在一个文件中捕获流量

    if (FD_ISSET(FD_com, &fds))
    {
        // wait for data to come in on the serial port
        if ((nbytes = read(FD_com, port_buf, PORTBUFSIZE)) > 0)
        {
            for (i=0; i<nbytes; i++)
            {
                fwrite(&port_buf[i], 1, sizeof(uint8_t), fout);
if(FD_-ISSET(FD_-com和fds))
{
//等待串行端口上的数据输入
如果((nbytes=read(FD_com,port_buf,PORTBUFSIZE))>0)
{

对于(i=0;这是令人困惑的。你是“丢失了一些字节”,还是长线被打断成了短段(例如,“
敏捷的棕色狐狸跳过t
”+“
他是一只懒狗。
”)?你所说的“它能记录的最长连续字符串超过48个字节…”是什么意思?你为什么要使用
O\u NDELAY
?如果你不需要它,试着把它拿出来看看会发生什么。还有显而易见的(愚蠢的)问题是:
PORTBUFSIZE
定义为什么?Scott,我已经更新了这个问题。我正在测试一些二进制消息。这些消息以突发方式发送,每个消息都有不同的长度。一些消息只记录了前48个字节。PORTBUFSIZE是512个字节。我使用O\u NDELAY,因为不需要DCD信号,所以延迟功能被禁用ed.I添加一行以不等待串行端口作为
term.c_cc[VMIN]=0;
,现在环绕问题得到了解决。但我仍然在一些消息中丢失了一到两个字节。我尝试使用
cat/dev/ttyS0>test.log
直接从命令行捕获日志。该方法也会不时丢失一个字节。顺便说一句,Microsoft C#下的类似方法可以不丢失字节
    if (FD_ISSET(FD_com, &fds))
    {
        // wait for data to come in on the serial port
        if ((nbytes = read(FD_com, port_buf, PORTBUFSIZE)) > 0)
        {
            for (i=0; i<nbytes; i++)
            {
                fwrite(&port_buf[i], 1, sizeof(uint8_t), fout);