2014-08-30 61 views
0

如果您致电opendir(argv[i])argv[i]textfile而不是directory的名称,会发生什么情况?在文本文件中调用opendir(3)而不是目录

+0

“发生了什么....”你总是可以试试看,并看到 – TerryG 2014-08-30 20:15:01

+2

@TerryG:但如果行为是未指定/未定义的,那并不总是可靠的(幸好,在这种情况下,它是明确的,所以这将是一个很好的教育测试来尝试)。 – Cornstalks 2014-08-30 20:16:30

回答

2

From man opendir

返回值
opendir()fdopendir()函数返回一个指向目录流。出错时,返回NULL,并适当设置errno

在这种情况下,errno将是ENOTDIR:name不是目录。

+0

谢谢。有没有办法知道argv [i]是不是使用opendir的文件名? – Apollo 2014-08-30 20:13:27

+0

看看['stat'](http://linux.die.net/man/2/stat),你可以在响应中使用一个'S_ISREG'宏来检查它是否是普通文件。 – Cornstalks 2014-08-30 20:15:02

+0

可能首先尝试使用fopen打开它作为文件,然后将其作为目录打开它可能会更容易吗? – Apollo 2014-08-30 20:18:07

1

manual说会发生什么:

的执行opendir()和fdopendir()函数返回一个指向 目录流。 出错时,返回NULL,并且适当地将errno设置为 。

0

POSIX says

返回值
成功完成后,这些功能必须返回一个指针型DIR的对象。否则,这些函数将返回一个空指针并设置errno来指示错误。

[...]

ERRORS

的执行opendir()函数可能会失败,如果:

[...]

[ENOTDIR]
的一个组件dirname命名现有文件,既不是目录,也不是目录的符号链接。

因此,它返回NULL,并将errno设置为ENOTDIR

相关问题