私はDebianユーザー空間でアプリケーションを実行していますが、私はログにrsyslogを使用しています。 Iは、次のコマンドを使用して、メインスレッドにログを開く:この後rsyslogが同じログを2回出力する
openlog(NULL, LOG_CONS | LOG_NDELAY, LOG_LOCAL0);
メインスレッドは、2つのスレッド(デタッチ)作成:
pthread_create(&tx_tid, NULL,tx_main, NULL);
if(0 != th_ret_val)
{
LOG(LEVEL_ERR,"failed to create tx thread, ret_val = %d",th_ret_val);
}
pthread_detach(tx_tid);
pthread_create(&rx_tid, NULL,rx_main, NULL);
if(0 != th_ret_val)
{
LOG(LEVEL_ERR,"failed to create rx thread, ret_val = %d",th_ret_val);
}
pthread_detach(rx_tid);
およびpthread_exitを行います。
ログの中には、いくつかのログが2回印刷されているのがわかります(これはLOG上に増えたトークン番号を追加して同じトークン番号を印刷したため同じLOGです)行方不明!
なぜこのようなことが起こるのかを教えてもらえますか?
注:
#define LOG(prio, ...) my_log(__FILE__, __LINE__, __func__, prio, __VA_ARGS__)
と次のようにmy_logが実装されている: LOGマクロがある
#define LOG_MAX_LEN 200
[LOG_MAX_LEN] full_fmt
静的チャー。
void my_log(const char * file、int line、const char * func、int prio、const char * fmt、...) { va_list args;
snprintf(full_fmt, LOG_MAX_LEN, "LOG:tid-%d %-30s:%003d, %-20s - %s", pthread_self(), file, line, func, fmt);
va_start(args, full_fmt);
vsyslog(prio, full_fmt, args);
//vprintf(full_fmt, args);
va_end(args);
}