c - read() 似乎进入无限循环

标签 c linux

我正在尝试从套接字读取数据。出于某种原因我无法理解,读取函数似乎进入了无限循环。我认为发生这种情况的原因是因为在使用 eclipse 进行调试时,调试器没有通过读取函数。另外,当我用终端运行程序时,它会永远运行。帮忙!!

附加信息:在 Linux 上运行,不确定是否与此问题有关,但我在程序中创建了线程。

我想我应该提到的另一件事:第一次调用 read() 时它按预期工作并读取套接字中的整个消息。当第二次再次调用 read() 时(当没有任何内容可读时),问题就开始了。我预计 read 会返回 0 来结束函数,但相反,read 会进入无限循环。

这就是一切发生的地方:

read_write_res block_read_reply(int fd, void* buf, int max, int* read_size) {
int flag = 1;
if (read_size != NULL)
    *read_size = 0;
int i;
while (1) {
    i = read(fd, buf, max); /* HERE is where the debbuger gets stuck */
    if (i == 0 && flag == 1) //nothing to read
        continue;
    if (i == 0 && flag == 0)
        return READ_WRITE_SUCCESS;
    if (i < 0){
        return READ_WRITE_FAILURE;
    if (i > 0 && read_size != NULL)
        *read_size += i;
    }
    flag = 0;
    max -= i;
    buf = (char*) (buf) + i;
}
return READ_WRITE_SUCCESS;

最佳答案

如果 read 返回 0,则表示您已到达文件末尾状态。对于套接字或管道,这意味着将没有更多内容可读。曾经。所以在这种情况下执行 continue; 绝对不是你想要做的。

关于c - read() 似乎进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14552959/

相关文章:

c - 在C中搜索多个单词,并在它们后面显示以逗号分隔的信息

c - 使用 fscanf 读取制表符分隔的记录

c - 如何将指针指向数组的内容赋值?

c - 检测何时从程序打开 fifo

c - 在c中的一行中输入字符和整数从过去的输入流中读取字符

linux - 在 Linode 服务器 Debian 9 上为 php5.6 安装 GD 库时依赖关系中断

linux - 使用awk查找字母并打印结果

c - P线程介绍

java - 使用 JSch 执行 'sudo su -'

linux - 脚本持续运行数小时