发生错误后,我自然调用perror()
。但是当我这样做的时候,我会有一个分割错误,或者我不知道发生了什么。
int fd;
if((fd = open(FILENAME, O_RDONLY)) == -1) {
perror("fbi");
exit(1);
}
for(;;) {
readed = read(fd, buffer, BUFSIZE);
if(readed == 0)
break;
if(readed == -1) {
perror("fbi"); // <- here's the error
exit(1);
}
怎么解决这个问题?
更新:
printf("%d\n", errno); // given 9
更新2:
似乎与
printf("error: %s\n", strerror(errno));
函数中传递的缓冲区大小有关系。如果recv()
是BUFSIZE
,则给出上述错误。但如果1
是例如,BUFSIZE
没有错误。有人能解释这种行为吗? 最佳答案
从这一片段中不可能知道到底出了什么问题。但总的来说,问题的答案是“为什么在调用[Rock Solid C library func here]时我要segfault?”通常是:你的堆栈是油炸的。读到的,当然是首要嫌疑犯。
关于c - perror()给出段。故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12573266/