gpt4 book ai didi

c - Read() 函数不会读取串行通信上的全部数据

转载 作者:行者123 更新时间:2023-12-04 04:34:03 24 4
gpt4 key购买 nike

这是我的代码

void Reading_TtyS0()
{
int ret;
char mypipe_ttyS0[80] = {0};
fcntl(fd, F_SETFL, 0);

ret = read(fd, ttyS0_mypipe , 80 );
printf(ret = %d\n", ret);
if (ret > 0)
{
perror("Message Log, Reading /dev/ttyS0");
printf("Message Log, Reading /dev/ttyS0 with data = %s\n", ttyS0_mypipe);
tcflush(fd, TCIFLUSH);
ret = 0;
}
}

我的输出是

ret = 8

消息日志,读取/dev/ttyS0:成功

消息日志,读取/dev/ttyS0 数据 = 0066923:

我只读取 8 个字节而不是 80 个字节。

我应该收到 0066923:12:13:134:1134:112344:333...(直到 80 字节)

gtkterm 上的输出和我正在接收完整的数据。

最佳答案

read()不一定返回它被告知要读取的字节数。

所以循环阅读直到你得到你想要的:

 char mypipe_ttyS0[80] = {0};
fcntl(fd, F_SETFL, 0);

size_t bytes_to_read = 80;
size_t bytes_read = 0;
while (bytes_to_read > 0)
{
ssize_t result = read(fd, ttyS0_mypipe + bytes_read, bytes_to_read);
if (-1 == result)
{
if ((EWOULDBLOCK == errno) || (EAGAIN == errno))
{
continue;
}

perror("read() failed");

break;
}
else (0 == result)
{
fprintf(stderr, "Connection closed.");

break;
}

printf("Read %zd bytes.\n", result);

bytes_to_read -= result;
bytes_read += result;
}

....

关于c - Read() 函数不会读取串行通信上的全部数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20064418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com