• ベストアンサー

fopenでディレクトリ内の全ファイルを順次開く方法

 UNIX上の/home/info/user/log内にある*.logファイルを一つずつfopenで開いて一行ずつ読み込み、用が済んだらfcloseで閉じていくようなプログラムを作りたいのですが、どうすれば良いのでしょうか?  最初はls -l /home/info/user/log/*.logをリダイレクトしたファイルリストを作り、それを読み込ませてfopen……という流れを考えていたのですが、対象となるファイルが万単位に登る為実現不可でした。  一行ずつ読み込ませる部分は既に出来ているので、fopen/fcloseに絞ってお教え下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.1

お書きの方法でも別に万のファイルがあっても実現可能だと思いますが、リダイレクト先の一時ファイルを置く場所が足りないのでしょうか? 普通は、opendirして、 (readdirでディレクトリの内容を読み出してファイル名を調べfopen→処理→fclose) を繰り返します。

Zephyranthes
質問者

お礼

 lsリダイレクト実行を大量のファイルがあるディレクトリに対して行うとCPUかメモリを圧迫してしまうようで、いつまでたっても帰ってきませんでした。  opendir→readdirでで出来ました。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

ANo.1さんのおっしゃっている通りになるとおもいますよ。 ANo.1さんの回答には、参考URLが無かったので、載せておきます。 notnotさん、ごめんなさい。

参考URL:
http://www.ncad.co.jp/~komata/c-kouza14.htm
Zephyranthes
質問者

お礼

 確かにこんな形になりました。  教えていただいたやり方が正しかったと確証を持てました。ありがとうございます。

すると、全ての回答が全文表示されます。
  • hosuke_dx
  • ベストアンサー率33% (4/12)
回答No.2

fopen したいファイルの名前は系統立っていますか? ファイル名が file001,file002...file10000 のようにシーケンシャル なネーミングになっているもしくはそのような ネーミングにすることが可能ならば カウンタを文字として扱い、fopen→処理→fcloseのループ内で ファイル名を作成してしまうという方法がありますよ。 そうすればファイル名一覧をテーブルとして持ったりしなくても よいのでプログラムは簡潔になります。

Zephyranthes
質問者

お礼

 使われていない番号などがあったりする為規則性はあってなきが如しでした。  ですがその発想は盲点でした。ありがとうございます

すると、全ての回答が全文表示されます。

関連するQ&A