C 为什么这段代码给出了错误的文件描述符
我对以下代码有问题。这是给我错误的文件描述符错误C 为什么这段代码给出了错误的文件描述符,c,linux,file-io,C,Linux,File Io,我对以下代码有问题。这是给我错误的文件描述符错误 #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 wor
#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);
}
#包括
#包括
#包括
#包括
#包括
int main()
{
int fd=打开(“/tmp/test”,仅限Ordu);
长透镜=20;
长词;
ssize_t ret;
如果(fd==-1)
{
佩罗(“公开”);
返回1;
}
如果(len>SSIZE_MAX)
{
len=SSIZE_MAX;
}
ret=读取(fd和word,len);
while(len!=0&&ret!=0)
{
如果(ret==-1)
{
如果(errno==EINTR)
{
持续
}
佩罗(“阅读”);
打破
}
len-=ret;
word+=ret;
ret=读取(fd和word,len);
}
关闭(fd);
}
调试后,我发现在第一次迭代后,fd
的值变大了。我不知道这是怎么发生的。在您的代码中
ret = read(fd, &word, len);
原因是,当您试图将20
字节读入指定为sizeof(long)
的内存时,该内存远远小于所需的容量
写这篇文章的一个正确方法是
ret = read(fd, &word, sizeof(word));
您将
20
字节读入1个long
,其中有4或8个字节的空间。是的,收到了,谢谢您的时间。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请看网页,也谢谢苏拉夫,你是一个英雄。很抱歉,我没有足够的声誉来投票的答案。我是新手,不客气@如果它有助于解决你的问题,你也可以。不管怎样,不要为投票而烦恼。