2016-12-05 3 views
1

open()を呼び出すと、pathnameとオプションのflagsを指定してファイル記述子が返されることはよく知られています。 man page for open()POSIXのファイルのみを開く

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

、フラグO_DIRECTORYがどこに定義されています。

パス名がディレクトリでない場合は、オープンが失敗する原因。この フラグは、FIFOまたはテープの デバイスでopendir(3)が呼び出された場合に、サービスの拒否を避けるため、カーネルバージョン2.1.126で追加されました。

しかし、私はopen()は、ディレクトリではなく、ファイルに失敗する原因と思われる、O_FILEのようなものを見つけるように見えることができませんでした。

stat()を呼び出すのではなく、open()に渡すか、pathnameがファイルであるかどうかを判断する別の方法がありますか?

答えて

1

いいえ、このようなフラグはありません。 stat機能は、競合状態が存在するため、同様に受け入れられません。 (一般的に、あなただけではないopenとの組み合わせで、それ自体でstatを呼び出す必要があります)

あなたのオプションは以下のとおりです。

  1. 使用fstat

  2. 書き込みのためにファイルを開きます。このファイルは、ディレクトリとしてEISDIRを返します。

  3. readと呼び、EISDIRをディレクトリに返します。

関連する問題