fopen在linux中打开文件夹,plain C:用fopen()打开一个目录

C99标准(或C2011标准)中不存在目录.因此,根据定义,打开目录可以是特定于实现的行为,也可以是未定义的行为.

fopen(3)可能失败(给出NULL结果). fseek(3)也可能失败(通过返回-1).然后你最好检查errno(3)或使用perror(3)

记录ftell返回长,-1L失败.在64位Linux上,这是0xffffffffffffffff.

你的代码应该是

FILE* fd = fopen(argv[1],"rb");

if (!fd)

{ perror(argv[1]); exit(EXIT_FAILURE); };

if (fseek(fd,SEEK_END)<0)

{ perror("fseek"); exit(EXIT_FAILURE); };

long flen = ftell(fd);

if (flen == -1L)

{ perror("ftell"); exit(EXIT_FAILURE); };

BTW,在带有libc-2.17和3.10.6内核的Linux / Debian / Sid / AMD64上,当argv [1]为/ tmp时,代码运行正常;令人惊讶的是,flen是LONG_MAX,即0x7fffffffffffffff

顺便说一句,在Linux上,目录是文件的特例.在文件路径上使用stat(2)(和file descriptor上的fstat,可能是从某些FILE *获得fileno(3)),以了解更多关于某个文件的元数据,包括其“类型”(通过其模式).你想要opendir(3),readdir(3)& closedir(3)对目录内容进行操作.另见inode(7).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值