4

他のstdio関数のperrorようなユーザースペースバッファがあるため、内部シグナルハンドラを使用する必要がありますか?printf

4

2 に答える 2

4

perrorは非同期信号セーフ関数の表にリストされていないため(たとえば、セクション2.4.3信号アクション)、非非同期信号を中断する信号に応答して呼び出される可能性のある信号ハンドラーから呼び出すことは安全ではありません。 -安全な機能。

于 2012-08-08T09:10:06.457 に答える
2

perror()は非同期信号セーフではありません。信号ハンドラー内で呼び出すと問題が発生する可能性がありますが、すでにエラーが発生している場合は、それまたは他のログutils(おそらくaysnc-signal-safeではない)を呼び出す必要があります。エラーを報告します。出力ログメッセージが台無しになっていない可能性があります。散らかっていても、情報が得られるので、何もないよりはましです。

独自の再入可能安全ログユーティリティを作成することもできます。(再入可能リングバッファ、まれなwrite()システムコール)

于 2012-08-08T09:42:06.123 に答える