嵌入式linux单板上读串口read(dev, buf,count),count居然被修改,真是奇怪呀,help

发布于 2022-09-28 01:47:49 字数 1630 浏览 7 评论 0

我会多次调用这个函数read_check(dev, buf, 1或者4), 这个函数跑了大概20次左右就会出现怪事:
res1= -1, 4, 4  
res2= -1, 4, 4, 716768201  
Failed to read: Interrupted system call
read调用的count值居然被修改了!

"Failed to read:"是我在这个函数失败退出时打印的,请大家帮忙分析一下呀,搞了好几天没搞定.

这样一个函数,linux里的原代码,打印是出现问题后我打印的:
static int read_check(int fd, void *buf, int count)
{
        int res;
        int cnt=0;
       
        do {
                res = read(fd, buf, count);
                printf("res1= %d, %d, %d  \n", res, errno, EINTR);
                if (res != -1) {
                        buf += res;
                        count -= res;
                }
               printf("res2= %d, %d, %d, %d  \n", res, errno, EINTR, count);
        } while (count && (errno == 0 || errno == EINTR));  
       
        if (count)
                return -1;
       
        return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文