4

syslogロギングに使用するアプリケーションがあります。このアプリケーション内の別のライブラリはopenlog()、それ自体の使用法を明示的に要求します。この場合、何か奇妙なことが起こります。stderr出力は、すでに開いているtcpソケットに送信されます。libの出力ログをに変更すると、stderrまたはstdoutすべてが正常に機能します。syslogこれが2つの接続の問題なのか、それともコードのどこかで混乱しているだけなのか、疑問に思っていました。

これは、メインアプリのsyslog初期化です。

openlog( "app", LOG_PID|LOG_NDELAY, LOG_LOCAL1 );

これは、libのsyslog初期化です。

openlog("lib", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
4

1 に答える 1

1

おそらく実装依存です。MUSL libcを使用している場合、コードはsyslog.cにあり、syslog に 1 つの fd しか使用されていないことがわかります (つまり、2 つのopenlog-s が同じ を共有していlog_fdます)。GNU libcソース コードを調べて、ほとんどの Linux 実装で何が起こるかを確認してください。straceまたはで調査することもできますltrace

于 2012-10-20T10:05:31.740 に答える