다음 코드에 문제가 있습니다. 그것은 나에게 나쁜 파일 기술자 오류를주고있다. 디버깅시이 코드가 잘못된 파일 설명자를 제공하는 이유
#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);
}
I는 첫번째 반복 이후 fd
의 값이 다수로 변경되는 것을 발견 하였다. 나는 이것이 어떻게 일어나고 있는지 모른다. 당신이 필요한 것보다 훨씬 적은 sizeof(long)
위해 지정된 메모리에 20
바이트를 읽기 위해 노력하고 귀하의 코드에서
당신은'4 또는 8 바이트 공간이 1'long',에 20' 바이트를 읽을 수있을 것이다. – mch
네, 시간 내 주셔서 감사합니다. – ahmedrajput
스택 오버플로에 오신 것을 환영합니다. 여기서 '감사합니다'라고 말하면 가장 좋은 방법은 위의 좋은 질문과 유용한 답변 (충분한 답변을 얻으려면 명을 얻은 것임)이며, 질문에 대한 가장 유용한 답변을 수락하면됩니다. (이는 또한 평판에 대한 귀하의 에 약간의 도움이됩니다). [정보] 페이지 및 [질문은 어떻게합니까? 여기에 있습니까?] (http://stackoverflow.com/help/how-to-ask) 및 [내 질문에 대한 대답은 무엇을해야합니까? ?] (http://stackoverflow.com/help/someone-answers) –