• 締切済み

C言語のファイル操作について

C言語のファイル操作について ログをファイルで取りたいと思っていますが、膨大なログになってしまうため 分割してとれないかと思っています。 ・ループ一定回数で新たにファイルを起こす ・一定のライン数に達した時に新たにファイルを起こす それぞれの方法についてどのようにプログラミングしたらいいかご教授ください。

みんなの回答

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

>プロセス再起動時にログファイルを引き継ぎたいです >ループ一定回数で新たにファイルを起こす >一定のライン数に達した時に新たにファイルを起こす >複数箇所から呼ばれるので内部実装にしたいのです >ログは複数プロセスのログを入れようと思ってます 上記の要件を全て満足するとなると、結構大変になるかと思います。 1.要件として、複数のプロセスから書くことと、ループ一定回数で切換は、両立しません。 プロセスAが100回に1回ファイル切り替え、プロセスBが100回に1回、ファイル切換をすると プロセスAが99回出力、プロセスBが99回出力の状態では、またファイル切換はありません。 プロセスAが100回目の出力時にファイル切り替えを行うと、次のプロセスも100回目なので、 ファイルに1行かいただけで、直ちにファイル切換が発生してしまいます。 ですので、「ループ一定回数で新たにファイルを起こす」というのは、あきらめるか、 1プロセスで1ファイルにする必要があります。 2.プロセス再起動時に、ログファイルを引き継ぐためには、 以下のことを行う必要があります。 1)最新のログファイル名を特定する。 logfile.nnnn.yyyymmddで当日でnnnnが最大のファイル名を求める。 2)上記のファイルを先頭から全て読み込み、その行数を取得する。 3)一旦、クローズし、そのファイルに対して、ログ出力するようにオープンし直す。 3.複数のプロセスから書き込む場合、行数の管理をするならば、 専用のログ出力プロセスを作成し、そのプロセスに、全てファイル切り替えなどの 管理を行わせるようにすることが1つの案として考えられます。その場合、 そのログ専用プロセスへのログ出力依頼は、プロセス間通信(パイプ、TCP/IPなど)で行います。 4.複数のプロセスから書くが、ログ出力専用のプロセスを作らない場合は、 今、何行まで書いたかた等の情報を全プロセスで共有する必要があります。 その為には、共有メモリ、ファイル等が利用可能ですが、きちんとプロセス間で排他を とる必要があります。

全文を見る
すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

#3です。 更に、以下の条件についても提示されるとよいかと思います。 1.プロセス再起動時に、そのログファイルを引き継ぐ必要があるのか否か。 (もし、引き継ぐ必要があるなら、10000行ごとに切り替えの場合、起動時に すでに、9999行に達していた場合、1行のみログ出力し、 ファイル名を切換る必要があります。) 2.ループ一定回数毎にとは、どのような事でしょうか。 もう少し、具体的に説明されるとよいかと思います。

aseton19772626
質問者

お礼

プロセス再起動時にログファイルを引き継ぎたいです ループ一定回数というのは、forループなどで1000回通ったら改ページするとか、 といったことです。

全文を見る
すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

以下の条件を明記されると更に良い回答が得られるかと思います。 1.OS及びコンパイラ 2.#1のかたが言われているようなツールを試用しても良いのかどうか。 3.ログを書くのは、1プロセスだけなのか、それとも同じログファイルに複数のプロセスから、 ログを書くのか。 4.ログを切り替えた時の、ファイル名はどうしたいのか? 例1 logfile.yyyymmddhhmmssのように開始時のタイムスタンプを張り付ける。 例2 logfile.yyyymmdd.nnnn(nnnn=1~9999)のように日付で連番をつけたい。 等を例としてあげればよいかと思います。

aseton19772626
質問者

お礼

OSはwindowsです コンパイラはVSを使うことになると思います 複数箇所から呼ばれるので内部実装にしたいのです ログは複数プロセスのログを入れようと思ってます ファイル名は例2の通りです プログラミングスキルが足りないので実際にどうコーディングすればいいのかわからないんです

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「ループの回数」と「出力した行数」を覚えておいて, 一定値になったらファイルを変える. そんだけ.

aseton19772626
質問者

お礼

なんとなくイメージではわかるのですが実際にどうプログラミングしたらいいのかわかりません

全文を見る
すると、全ての回答が全文表示されます。
  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

Linuxならlogrotateに任せればいいのでは。 Windowsでも外部ツールに任せれば。

aseton19772626
質問者

お礼

内部でやりたいのですが、手段はありますでしょうか?

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

関連するQ&A

  • C言語のファイル操作

    すいません、C言語の初心者です。 C言語のファイル操作において、ファイルから読み込んで、読み込んだ分だけその情報を消していくというのは可能ですか?可能であればサンプルソースのあるURLもしくはソースそのものを教えて下さい。

  • C言語でバイナリファイルの読み込み

    C言語のプログラミングに関する質問です。 x個(分かっている数)のfloat型の数値が入ったバイナリファイルを読み込んで、 要素数[x]のfloat型配列として扱うにはどういったコードを書けばよいのでしょうか? どなたかご教授いただければ幸いです。

  • C言語について

     プログラミング言語について質問があります。今、C言語を練習中ですが、C言語に関する本を見ると、大体、(入門者用の教科書しか知らないのですが)ファイル操作とか、構造体とかの説明とかで、終わっています。それで、自分はWindowsでグラフィック操作(例:動画とかを扱う)とかの、プログラムを組みたいのですが、C言語でそれができるのでしょうか。それともC++言語とか、Javaとか他の言語を習得しなければいけないのでしょうか。また、欲張りますが、C言語でグラフィック操作ができるのなら、どんな本を読めばいいのでしょうか。解らなかったので、投稿しました。よろしければ、回答宜しくお願いします。

  • C言語のファイル読み込み

    以前の質問で書いているプログラミングでの延長上質問なのですが、 C言語でファイル名を自分で入力したとします。 使われている拡張子は既知なので、「????.csv」の「????」(後に入力する為、文字数不明、数値混じり、コンマも混じる)だけを格納したいのですが、どうすればいいでしょうか?

  • C言語をはじめたいと思うのですが・・・

    GoogleでC言語と調べれば出てくるのですが、 やはり少し見にくかったり、印刷するとなると数が膨大になってしまいます。 そこで、本で学びたいと思うのですが、 初心者にも理解しやすいC言語の本はないでしょうか? できればAmazonリンクを張って下さるとうれしいです

  • C言語のプログラミングについての質問です

    C言語の課題で数値を入力したらその数に40+して二乗するプログラミングを作りたいのですがソースがいまいちわかりません どなたかご教授お願いします

  • C言語のプログラミング

    C言語がなかなか上手く勉強できません。お力添えお願いします。 問題:log10の2を求めるプログラミングを作れ。 回答いただけると助かります。

  • 2つのファイルを比較するC言語プログラムについて

    はじめまして、C言語プログラミングについて質問です。 2つのファイルの内容を比較するプログラムをC言語で作成する方法 について教えて頂けますでしょうか? 2つのファイルをそれぞれオープンした後、ファイルの先頭から1行ずつ読み込んで比較し、 違いがあればその行を画面表示するという動作をさせたいと考えて おります。

  • Javaを使用したファイル操作について

    Javaを使用したプログラミングと聞くと、Webアプリケーションの開発というイメージがあるのですが、VBNやbat処理等でできるファイル操作などはできるのでしょうか? また、Javaに限らず、c言語等のプログラミング言語でも可能なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • C言語でのプログラミングについて

    C言語でのプログラミングについて これまでJavaでよくプログラミングをしてきたのですが、最近Cもよく使っています。 しかしJavaに慣れすぎたのか、Cで大きなプログラムを作ろうとすると、どうすればいいのかよく分かりません。 HeaderファイルはJavaでいうと継承みたいなもので、複数のファイルに同じ機能を持たすときに使うのでしょうか? Javaではクラスがありそれぞれに役割がありますが、Cの場合はファイルごとに大まかな役割を分けるのでしょうか? (例えばユーザーからインプットを取ってくるファイルをgetInput.cで、それを処理するファイルをvefiryInput.cというようにするのでしょうか?) C言語でのプログラミングの仕方を教えてください。