C言語でのマルチスレッドでのログファイル出力したいと考えています。
以下の方法にて、試みてみましたが、ログを確認するとマルチスレッドの為か、グチャグチャになってしまいます。
排他制御等が必要なのでしょうか?
詳しい方、教示願います。
・7/12 追記
返答遅くなりすいません。
ファイルがグチャグチャというのは、其々のタスクから出力した文字列が混ざったような出力結果ということです。
正確にはマルチスレッドというより、マルチタスクです。
[プラットフォーム] vxWorks
#include <stdio.h> #include <sys/types.h> FILE *fp; char filename[] = "sample.log"; void log(void) { fprintf(fp, "%s : tid => %d\n", __func__, gettid()); /*7/12補足漏れ追記 */ fflush(fp); } int main(void) { /* ファイルオープン */ if ((fp = fopen(filename, "a+")) == NULL) { fprintf(stderr, "ファイルのオープンに失敗しました.\n"); return EXIT_FAILURE; } /*途中簡略 複数スレッド起動して、各スレッドから上記log関数をコールする*/ /* ファイルクローズ */ fclose(fp); }
> グチャグチャになってしまいます。排他制御等が必要なのでしょうか?
どのようにグチャグチャになってしまうのでしょうか。一般的には排他制御が必要です。Cランタイムライブラリも、スレッドセーフ、マルチスレッド対応版を使わなければならない場合もあります。試した動作環境OS、C言語環境を明示し、コード中の「途中簡略」とある部分を明らかにしないと正確な回答は望めないと思います。
”グチャグチャ"の説明を求む。
複数のスレッドが関数:log()を呼ぶとファイル"sample.log"の中身が崩れていると推測されるが。
> 排他制御等が必要なのでしょうか?
やってみるといい。
返答遅くなりすいません。
>複数のスレッドが関数:log()を呼ぶとファイル"sample.log"の中身が崩れている
おっしゃる通りです。
回答6件
あなたの回答
tips
プレビュー