小编Hei*_*ica的帖子

plain C:用fopen()打开一个目录

我有一个打开文件并检查其长度的程序.

FILE* fd = fopen(argv[1], "rb");
fseek(fd, 0, SEEK_END);
size_t flen = ftell(fd);
if (flen == ((size_t)-1)) {
    printf("%s is a directory.\n", argv[1]);
    fclose(fd);
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

现在,至少在Linux下,fopen()在打开目录时返回有效的文件描述符.这导致查找操作返回-1(或者,如64位系统上的size_t无符号,0xFFFFFFFFFFFFFFFF= 2 64 -1).

不幸的是,上面的代码(flen == ((size_t)-1))中的条件没有捕获到这种情况,也没有flen == 0xFFFFFFFF(编辑:应该0xFFFFFFFFFFFFFFFF).printf()- 使用%xord %d作为格式字符串的命令显示比较的两侧应具有相同的值.

为什么比较运算符的行为方式如此奇怪,即使双方的类型相同(size_t)?我使用gcc 4.8.1作为编译器.

c linux io types

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

io ×1

linux ×1

types ×1