gpt4 book ai didi

c - 为什么这段代码给出了错误的文件描述符

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:59 25 4
gpt4 key购买 nike

我对以下代码有疑问。它给我错误的文件描述符错误。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
int main()
{
int fd = open("/tmp/test", O_RDONLY);
long len = 20;
long word;
ssize_t ret;
if(fd == -1)
{
perror("open");
return 1;
}
if(len > SSIZE_MAX)
{
len = SSIZE_MAX;
}
ret = read(fd, &word, len);
while(len != 0 && ret != 0)
{
if(ret == -1)
{
if(errno == EINTR)
{
continue;
}
perror("read");
break;
}
len -= ret;
word += ret;
ret = read(fd, &word, len);
}
close(fd);
}

经过调试,我发现在第一次迭代后,fd 的值变成了一个很大的数字。我不知道这是怎么发生的。

最佳答案

在你的代码中

 ret = read(fd, &word, len);

原因 undefined behavior ,当您尝试将 20 字节读入指定给 sizeof(long) 的内存时,这比所需的要少得多。

一种正确的写法是

ret = read(fd, &word, sizeof(word));

关于c - 为什么这段代码给出了错误的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43072493/

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