問題タブ [errno]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - アプリケーション/ライブラリのエラー報告に errno を使用する
ソフトウェア プロジェクト用の C ライブラリを作成しています。エラー報告を行う必要がありますが、エラー コード、変数、および関数の複雑なセットを独自に実装するのが少し面倒です。libc が提供するカスタム エラー報告用の errno 機能を使用することは許容されますか? E...
私のすべてのエラーは、マクロによって指定されたカテゴリに当てはまります。
たとえば、コードに SHA256 ハッシュを 16 進数表記で読み取り、それをある種の内部形式に変換する関数が含まれているとします。errno
エラーを報告するために使用したい:
もちろん、この例は非常に単純化されています。実際には、他の関数でさらに多くのエラーが発生する可能性があります。
debugging - gdb の errno にウォッチポイントを設定する
errno がいつ変更されるかを調べようとしています。
最初に、gdb で「watch errno」を試みたところ、エラーが発生しました。
「-pthread」でコンパイルすることでこれを修正できました。ただし、それでも機能せず、エラーが発生します
「watch errno」と入力すると。errno にウォッチポイントを設定するには、どうすればよいですか?
c++ - stdio は常に errno を設定しますか?
ストリームがエラー (ただし EOF ではない) に遭遇するstdio
と、ストリームのエラー インジケータが設定され、ferror()
0 以外の値が返されます。私はいつも、より多くの情報が にあると思っていましたerrno
。しかし、どうすればこれを知ることができますか?
一部の機能のドキュメント [ man fopen
Linux など] には、それerrno
も設定されると記載されています。ただし、man fgets
一切言及errno
しない。glibc の情報ページは心強いものです。
ストリームに関連するエラー インジケータの設定に加えて、ストリームを操作する関数は、ファイル記述子を操作する対応する低レベル関数と同じ方法で「errno」も設定します。
しかし、この保証がどれほど強力かはわかりません。C標準で必要ですか?Visual C/C++ ではどうなりますか?
c - sendto() が失敗し、telnet 接続が切断され、プログラムがブロックされる
私は何日もこの問題に悩まされてきましたが、これがどこから来たのか本当にわかりません。
UDPを介して通信するプログラムを実行しています。sendto()
プログラム間の通信にメソッドを使用しています。また、ユーザーが開いて使用する UI TCP ソケットがあり、telnet を介してプログラムを管理します。telnet 部分は、プログラムの他の機能と 100% 連携しています。
問題は、このsendto()
方法を使用しているときに、プログラムが完全にブロックされ、Telnet 接続が切断されることです (通信がホストによって切断されたと表示されます)。私の問題は、プログラムがブロックされると、sendto()
後で何が実行されないため、失敗するのかがわからないことです。次のようなものでも:
で何も情報が得られませんerrno
。telnet 接続が切断されているという事実は、私には奇妙に思えます。なぜなら、それは非常に異なるポート上にあるため、このように中断されるべきではないからです。UDP ソケットを非ブロッキングとして設定しようとしましたが、それでも機能しません。コードの非動作部分は次のとおりです。
事前にご協力いただきありがとうございます。具体的な情報が必要な場合はお問い合わせください。
c++ - set_new_handler と errno
を使用set_new_handler
し、ハンドラー関数が呼び出されerrno
た場合、設定されることが保証されmalloc
ます。それとも使ったほうがいいstrerror(ENOMEM)
ですか?errno
Microsoft C++ と GCC で動作しますが、それが保証されているかどうかという問題が残ります。
c++ - fdopen() の呼び出し後の Errno 22
呼び出し時にエラーが発生し、22 にfdopen
設定errno
されます。exec コマンドを使用して子プロセスを呼び出しています。子はfdopen
ファイル記述子 4 を呼び出します。最初の子は機能し、データを親に送り返します。親errno
は 0 です。親が次の子プロセスを作成した後、fdopen(4, "w");
再度呼び出されます。これは がerrno
22 に設定されている場合です。
私が読んだことから、errno
22 forfdopen()
はモード引数が正しくないことを意味する可能性があります。fnctl
また、それはエラーである可能性があり、それはファイル記述子が悪いことを意味する可能性があることも読みました。ファイル記述子 4 を指定すると、最初の子プロセスで動作します。errno
別の を作成しようとすると 22 に設定されているのはそのためでしょうFILE*
か?
ある子プロセスではいつ機能するのかわかりませんが、次の子プロセスでは機能しません。誰かが私のためにこれに光を当てることができますか?
コードは次のとおりです。
mysql - テーブルを作成できませんerrno 150
これが私のSQLスクリプトです
構文エラーは表示されません。すべてがうまく見えます。私のデータベースエンジンはinnoDBです。しかし、どうして私はこのエラーを受け取り続けるのですか?
エラーが発生している行は表示されません。
c - lseek EOVERFLOW エラー処理
off_t が表すことができるよりも多くのバイトをシークしようとすると、EOVERFLOW エラーが発生することに気付きました。off_t でより大きな数を求めるにはどうすればよいですか?
gdb - GDB の値の代わりに「errno」名を出力します
errno
GDBで数字だけでなく記号名を出力する方法はあるのだろうか。たとえば、代わりに
次のようなものを見たいです
c - open() が失敗し、errno が設定されないのはなぜですか?
私のコードopen()
では、戻りコード -1 で失敗しますが、どういうわけかerrno
設定されていません。
出力は
errno が設定されていないのはなぜですか? open()
失敗した理由を特定するにはどうすればよいですか?