ホームページ >バックエンド開発 >C++ >stat() と lstat() を使用して Unix にディレクトリが存在するかどうかを確認するにはどうすればよいですか?

stat() と lstat() を使用して Unix にディレクトリが存在するかどうかを確認するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-16 10:13:03359ブラウズ

How to Check if a Directory Exists in Unix Using stat() and lstat()?

Unix でのディレクトリの存在の確認: stat() および lstat() システム コールの利用

特定のディレクトリが存在するかどうかを判断するのは一般的なタスクですUnixプログラミングで。 opendir() のような関数は、エラー処理を通じてディレクトリの存在を示すことができますが、単に存在を確認する場合には理想的なアプローチではない可能性があります。この記事では、stat() および lstat() システム コールを使用してこのタスクを効率的に実行する方法を紹介します。

stat() および lstat()

stat() lstat() 関数は、ファイルのパス名に基づいて、ファイルの存在と種類に関する貴重な情報を提供します。 opendir() とは異なり、これらの関数はファイルを開きませんが、その属性に関するデータを収集します。 stat() と lstat() の主な違いは、シンボリック リンクの処理方法にあります。

  • stat(): シンボリック リンクをたどり、リンクされたオブジェクトに関する情報を提供します。
  • lstat(): シンボリック リンク自体を評価し、その属性に関する情報を提供します。

ファイルがディレクトリであるかどうかを確認するには、S_ISDIR()マクロは stat() または lstat() と組み合わせて使用​​されます。次のコード スニペットは、その使用法を示しています。

#include <sys/stat.h>

struct stat sb;

if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode)) {
    // Directory exists and is accessible
}

追加のファイル タイプ チェック

ディレクトリとは別に、特定の S_IS* マクロを使用して他のさまざまなファイル タイプを検証できます。包括的なリストは次のとおりです。

  • S_ISDIR — ディレクトリ
  • S_ISREG — 通常のファイル
  • S_ISCHR — キャラクター デバイス
  • S_ISBLK — ブロック デバイス
  • S_ISFIFO — FIFO
  • S_ISLNK — シンボリック リンク
  • S_ISSOCK — ソケット

これらのマクロを理解すると、Unix プログラムで多用途のファイル タイプ チェックを行うことができます。

以上がstat() と lstat() を使用して Unix にディレクトリが存在するかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。