2014-08-30 74 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

相關問題