栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

pure C:使用fopen()打开目录

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pure C:使用fopen()打开目录

目录在C99标准(或C2011标准)中不存在。因此,根据定义,

fopen
-ing目录是实现特定的行为或未定义的行为。

fopen(3)可能会失败(给出

NULL
结果)。fseek(3)也可能失败(返回-1)。然后您最好检查errno(3)或使用perror(3)

ftell
是记录在案,以返回
long
,和
-1L
失败。在64位Linux上,这是
0xffffffffffffffff

您的代码应改为

FILE* fd = fopen(argv[1], "rb");if (!fd)   { perror(argv[1]); exit(EXIT_FAILURE); };if (fseek(fd, 0, SEEK_END)<0)   { perror("fseek"); exit(EXIT_FAILURE); };long flen = ftell(fd);if (flen == -1L)  { perror("ftell"); exit(EXIT_FAILURE); };

顺便说一句,在具有libc-2.17和3.10.6内核的Linux / Debian / Sid / AMD64上,当

argv[1]
is
时,代码可以正常运行
/tmp
;惊喜地,
flen
LONG_MAX
0x7fffffffffffffff

顺便说一句,在Linux上,目录是文件的特例。在文件路径上(以及在文件描述符(可能是通过some从fileno(3)获取)上)使用stat(2)来了解有关某个文件的更多元数据,包括其“类型”(通过其模式)。您希望opendir(3),readdir(3)和closedir(3)对目录内容进行操作。另请参见inode(7)。

fstat
FILE*



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号