fopen在linux中打开文件夹,plain C:用fopen()打开一个目录
C99標(biāo)準(zhǔn)(或C2011標(biāo)準(zhǔn))中不存在目錄.因此,根據(jù)定義,打開目錄可以是特定于實現(xiàn)的行為,也可以是未定義的行為.
fopen(3)可能失敗(給出NULL結(jié)果). fseek(3)也可能失敗(通過返回-1).然后你最好檢查errno(3)或使用perror(3)
記錄ftell返回長,-1L失敗.在64位Linux上,這是0xffffffffffffffff.
你的代碼應(yīng)該是
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,在帶有l(wèi)ibc-2.17和3.10.6內(nèi)核的Linux / Debian / Sid / AMD64上,當(dāng)argv [1]為/ tmp時,代碼運行正常;令人驚訝的是,flen是LONG_MAX,即0x7fffffffffffffff
順便說一句,在Linux上,目錄是文件的特例.在文件路徑上使用stat(2)(和file descriptor上的fstat,可能是從某些FILE *獲得fileno(3)),以了解更多關(guān)于某個文件的元數(shù)據(jù),包括其“類型”(通過其模式).你想要opendir(3),readdir(3)& closedir(3)對目錄內(nèi)容進行操作.另見inode(7).
總結(jié)
以上是生活随笔為你收集整理的fopen在linux中打开文件夹,plain C:用fopen()打开一个目录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查找并删除进程,linux中查
- 下一篇: 生效linux内核,Linux内核