私の学校のプロジェクトでは、*.jpg、*.c などの拡張子のファイル グロビングを実装しようとしています。そのためには、readdir(2) や getdents(3) などの関数を使用して現在のディレクトリからすべてのファイルを読み取り、strstr(3) を使用してそれらを照合し、exec(2) に渡す引数のリストに追加する必要があります。glob (3) を使用することは想定していません。これをどのように実装すればよいですか?
1 に答える
POSIX は、グロビングをサポートする関数を提供します。標準 C はそうではなく、Microsoft はそれをまったく異なる方法で行っています。
ヘッダー<fnmatch.h>
と関数fnmatch()
が答えの一部になる可能性があります。これによりopendir()
、readdir()
およびclosedir()
関数を使用してディレクトリをスキャンし、ファイル名を glob パターンと照合できます。
<glob.h>
質問の禁止事項がなければ、ヘッダーとglob()
関数の方が適切であることがわかるでしょう。
ヘッダー<wordexp.h>
とwordexp()
. これは実際よりも多くの作業を行いますglob()
が、禁止されていなければ、多くの労力を節約できます.
通常、glob()
必要なことを実行する可能性が最も高いものです。ただし、それは除外されているfnmatch()
ため、ファイル名を取得することを期待して使用できる可能性があります...まあ、実際には、どこから名前を取得するかは気にしません。指定した名前が指定したファイル名パターンと一致するかどうかを検証するだけです。
これらのいずれも使用するつもりがない場合は、認識できると予想されるシェル グロブに一致するように十分な正規表現を実装しreaddir()
、使用可能な名前を確認するために etc を引き続き使用する必要があります。