如果您致电opendir(argv[i])
和argv[i]
是textfile
而不是directory
的名称,会发生什么情况?在文本文件中调用opendir(3)而不是目录
回答
返回值
的opendir()
和fdopendir()
函数返回一个指向目录流。出错时,返回NULL
,并适当设置errno
。
在这种情况下,errno
将是ENOTDIR
:name不是目录。
谢谢。有没有办法知道argv [i]是不是使用opendir的文件名? – Apollo 2014-08-30 20:13:27
看看['stat'](http://linux.die.net/man/2/stat),你可以在响应中使用一个'S_ISREG'宏来检查它是否是普通文件。 – Cornstalks 2014-08-30 20:15:02
可能首先尝试使用fopen打开它作为文件,然后将其作为目录打开它可能会更容易吗? – Apollo 2014-08-30 20:18:07
的manual说会发生什么:
的执行opendir()和fdopendir()函数返回一个指向 目录流。 出错时,返回NULL,并且适当地将errno设置为 。
返回值
成功完成后,这些功能必须返回一个指针型DIR的对象。否则,这些函数将返回一个空指针并设置errno来指示错误。[...]
ERRORS
的执行opendir()函数可能会失败,如果:
[...]
[ENOTDIR]
的一个组件dirname命名现有文件,既不是目录,也不是目录的符号链接。
因此,它返回NULL
,并将errno
设置为ENOTDIR
。
- 1. 在Git中忽略目录中的文件而不是目录本身
- 2. 403错误只是目录,而不是目录中的文件
- 3. File.Copy目标文件是一个目录,而不是文件。
- 4. 不能opendir“没有这样的文件或目录”在Perl
- 5. 目录的创建,而不是文件
- 6. StreamWriter创建目录而不是文件
- 7. 仅复制目录中的文件而不是目录
- 8. 重命名文件,而不是文件路径中的目录
- 9. apk文件在bin/classes目录下,而不是bin文件夹
- 10. 在目录中使用命名约定而不是文件名
- 11. 文件是一个目录而不是文件
- 12. makefile在src目录中创建目标文件而不是对象文件夹
- 13. Shell脚本:检查该文件是否为文件而不是目录
- 14. 找到目录中的所有文件不是目录本身
- 15. 删除目录内的文件而不是整个目录
- 16. 文件被显示为目录,而不是文件?
- 17. 返回文件的文件路径,而不是当前目录
- 18. 文件串制作目录,而不是文件名
- 19. 上市目录:Opendir()
- 20. Directory.createDirectory在iOS中创建文件而不是目录
- 21. “/”在文件名中,而不是目录分隔符
- 22. 在.htaccess中的IndexIgnore隐藏目录而不是文件?
- 23. 新的文件被Eclipse目录中,而不是在当前目录
- 24. PHP检查文件是否存在而不是目录
- 25. 通过PLSQL打开文本文件而不创建目录
- 26. ReactJS:JSON文件是从本地主机取代而不是项目目录
- 27. 使用curl和opendir找不到文件
- 28. 保存/检索项目目录中的文件,而不是输出目录
- 29. .htaccess文件的mod_rewrite重定向到父目录,而不是在文件名是在两个目录
- 30. 使C++应用程序使用文件目录,而不是pwd
“发生了什么....”你总是可以试试看,并看到 – TerryG 2014-08-30 20:15:01
@TerryG:但如果行为是未指定/未定义的,那并不总是可靠的(幸好,在这种情况下,它是明确的,所以这将是一个很好的教育测试来尝试)。 – Cornstalks 2014-08-30 20:16:30