2016-12-05 55 views
1

衆所周知,在C調用open()將返回文件描述符,給定pathname和可選flags僅在POSIX上打開僅適用於文件

int fd; 
if ((fd = open(pathname, O_RDONLY)) == -1) { 
    printf("Could not open file\n"); 
    return; 
} 

man page for open(),標誌O_DIRECTORY定義其中:

如果路徑是不是一個目錄,導致open失敗。如果在FIFO或磁帶 設備上調用opendir(3),則在內核版本2.1.126中添加了此 標誌,以避免拒絕服務問題 。

但我似乎無法找到像O_FILE,這將導致open()失敗上的目錄,而不是文件。

有這樣一個可以傳遞到open()標誌或確定pathname是一個文件,而不是調用stat()的另一種方式?

回答

1

不,沒有這樣的標誌。 stat函數也是不可接受的,因爲它有競爭條件。 (一般情況下,你應該只由它自己open打電話stat,而不是組合。)

的選項有:

  1. 使用fstat

  2. 打開文件進行寫入,該文件返回目錄的EISDIR

  3. 致電read,它返回EISDIR的目錄。