すべてがタイトルにあります。マニュアルページは何も言いません。一部のGoogleでは、dlopenの後にerrnoをチェックしている人がいると報告していますが、いくつかの結果しかありません。関数は成功/不成功の値を返しますが、失敗の原因をどのように把握する必要があります。dlopen()はerrnoを設定していますか?
はerrnoを設定しますか?異なるerrno値はどこに定義されていますか? そうでない場合は、何が原因で障害が発生したのかを確認する必要がありますか?
すべてがタイトルにあります。マニュアルページは何も言いません。一部のGoogleでは、dlopenの後にerrnoをチェックしている人がいると報告していますが、いくつかの結果しかありません。関数は成功/不成功の値を返しますが、失敗の原因をどのように把握する必要があります。dlopen()はerrnoを設定していますか?
はerrnoを設定しますか?異なるerrno値はどこに定義されていますか? そうでない場合は、何が原因で障害が発生したのかを確認する必要がありますか?
No(強調が加えられる)。
dlopen()は、シンボルテーブルのハンドルを返すものとします。 ファイルが見つからない場合は、読み込み用に開けません。で処理するための適切な実行可能オブジェクトファイル形式でないか、ファイルの読み込み中またはそのシンボリックリファレンスの再配置中にエラーが発生した場合は、dlopen()はヌルポインタを返します。 より詳細な診断情報は、dlerror()から入手できます。
他によって述べたように、何もerrno
を修正からdlopen()
(または、可能性が高い、dlopen()
呼び出し関数)を禁止しません。しかし、標準準拠のdlopen()
は、errno
によって独自のエラーを報告することはありません。 dlerror()
に電話する必要があります。
OK、私が知らなかったdlerrorに関するman部分を見逃しました。そして、あなたのコメントのためにAndrewに感謝します。なぜなら、なぜ私がerrnoが変更されたときに私がトラックにいたと感じたのかを説明しています... – user1159290
個人的に、私はローカルのマンページを使用するのではなく、Open GroupのWebサイトをチェックすることを意味するPOSIXに従います。ほとんどのマンページはパターンに従っていますが、標準化されていないため、エラー情報が独自のセクションにあるか、「戻り値」セクションにある可能性があります。 –
'dlopen'は' errno'に* set *(意味のある値を代入しませんが)、 'errno'をゼロ以外の値でclobberすることは許されています。明示的に禁止されていることは許可されています)。 –
'dlerror'について' man dlopen'が明らかにしています... –
*設定* 'errno'は*エフェクト*' errno'とは異なります。 'dlopen()'を呼び出して 'errno'の値を変更することは可能です。たとえば、 'dlopen()'がライブラリの場所を見つけようとするとき、 'open()'呼び出しは失敗する可能性があります。 –
OPが「dlopen」のマニュアルページを読むのに気を使うことができなかったので、この質問を議論の対象にしないように投票しています。 – KevinDTimm