2009-09-16 15 views

答えて

9

POSIXではaccess(2)を使用してください。標準Cでは、できることはfopen()で開き、成功したかどうかを確認することです。

fopen()もし戻っNULL、あなたは区別するためにerrnoを使用しようとすることができ(errno == ENOENTを)「ファイルが存在しない」と(errno == EACCES)のケースを「アクセス許可が拒否されました」 - 残念ながら、これら2つのerrnoの値のみとPOSIXで定義されていますよく

(POSIX上でさえ、ほとんどの場合、ファイルを開こうとすると、なぜそれが失敗したのかを調べることです。access()を使用すると明らかな競合状態が発生するためです)。

+1

私はfopen()を使用しますが、ファイルが読み込み不能かどうか、そしてそれが存在しないかどうかを区別できるようにする必要があります。 –

+0

fopenを使う方が良いでしょう。アクセスはTOCTOU攻撃に対して脆弱です。 (http://en.wikipedia.org/wiki/TOCTOU)。あなたの場合、それがまったく問題であれば。 –

+0

私はこの汚れたコードを呼び出します... – Tobi

7

access()機能を使用します。それは存在するが、現在のユーザーにアクセスできない場合、ファイルが存在し、またはEACCESしない場合

if (access(pathname, R_OK) == 0) 
{ 
    /* It's readable by the current user. */ 
} 

errnoENOENTに設定されます。詳細なエラーコードについては、the manual pageを参照してください。

8

私はstat()自分自身のファンです。

+0

質問者はファイルのアクセス許可を読む方法を尋ねました。 stat()関数はファイルのパーミッションを返します。 fstat()関数は、オープンされたファイルハンドルを指定して、ファイルのパーミッションを返します。 – bearvarine

関連する問題