我的问题是,下面的代码在其他平台上运行正常,但在iOS 64bit上却没有。
详细信息如下:
LoginServlet
当我尝试使用fgetc()(仅用于测试)时,结果相同。
奇怪之处在于,返回值ferror()。 我心里的价值意味着ESRCH(“没有这样的过程”),而且我发现的几乎所有文件都说这个值与文件阅读任务无关。
请给我一些建议吗?
答案 0 :(得分:0)
ferror()
的返回值不是错误编号;它没有错误为零,错误为非零。如果您想知道错误编号,请检查errno
。最好显示完整的代码,包括fseek()
的返回值测试,等等。
我无法在Mac上重现您的问题。我创建了一个与你的文件大小相同的大文件:
$ ls -l big.file
-rw-r--r-- 1 jleffler staff 53394002 Oct 5 19:57 big.file
$
#include <stdio.h>
int main(int argc, char **argv)
{
const char *filename = "big.file";
if (argc > 1)
filename = argv[1];
FILE *f = fopen(filename, "r");
if (f == 0)
{
perror(filename);
return 1;
}
if (fseek(f, 0, SEEK_END) != 0)
perror("fseek END 1");
printf("EOF %ld\n", ftell(f));
if (fseek(f, -1024, SEEK_END) != 0)
perror("fseek END 2");
printf("POS %ld\n", ftell(f));
char buf[1024];
size_t n = fread(buf, 1, 1024, f); // OP reports returns 0.
printf("N = %zu\n", n);
int r = ferror(f); // OP reports returns 3.
printf("r = %d\n", r);
printf("POS %ld\n", ftell(f));
if (fseek(f, 0, SEEK_END) != 0)
perror("fseek END 3");
printf("POS %ld\n", ftell(f));
fclose(f);
return 0;
}
这不是很好的代码:它不会放弃检测错误(打印后perror()
返回);它不会显示读取的数据,因此可以将其与文件中的内容进行比较(使用随机数据生成器生成,然后使用GNU truncate
将其截断为文件的精确长度<) / p>
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror bf19.c -o bf19
$ ./bf19
EOF 53394002
POS 53392978
N = 1024
r = 0
POS 53394002
POS 53394002
$
这表示该代码适用于运行macOS Sierra 10.12和GCC 6.2.0的Mac。因此,您的问题在于您未显示的代码。调整代码,使其可以编译和运行,并显示一个最小的测试用例,就像这个重现问题的那个。有关如何操作的指导,请阅读: