![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
A 回答 (5件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?8acaa2e)
No.5
- 回答日時:
以下のURLは、直接関係ないですけど、なかなかおもしろいですよ^^
http://d.hatena.ne.jp/yupo5656/archive
執筆に参加したという『Binary Hacks ― ハッカー秘伝のテクニック100選』もまずまずでした^^
No.4
- 回答日時:
まず、C言語の標準規格では、signalおよびraise関数が規定されています。
すなわち、言語仕様の中にシグナルが含まれています。ただし、言語そのものではなく、ライブラリとして実現しています。標準規格で規定されているシグナルのうち、非同期で発生する可能性があるのはSIGINTだけですが、これもどんな風に実装されるかは処理系定義ですし、raise関数を用いてのみ発生させることができる仕様であったとしても規格の要件は満たしています。
そして、これら標準ライブラリの実現方法は、OSの機能を使ってもよいですし、使わなくても構いません。
シグナルというものは、ある事象が発生したときに、単に特定の関数を呼び出すだけです。raiseまたはabortの結果としてシグナルハンドラが呼び出された場合を除き、longjmpで脱出することも、exitやabortで終了することもできません。もちろん、シグナルハンドラの中から例外を送出することもできません。
一方、C++の例外は完全に同期的に発生します。そして、関数の枠組みを超えて、呼出し元の関数へ制御を移します。その際、途中に存在する自動オブジェクトは自動的に解体されます。
例外は特定の関数を呼び出すだけではありませんので、例外ハンドラの中でできることはかなり自由度が高くなっています。
No.3
- 回答日時:
C言語のシグナルはOSの機能であって言語の機能ではありません。
OSの機能をライブラリを通じて使用しているだけです。従って、LinuxとWindowsでは、まったく機能や使い方が違ってきます。というか、Windowsに同じ意味のシグナルはありません。それとC++の例外try~catchは、一般保護例外などの言語管理外の異常はキャッチしてくれません。言語仕様内の例外、newの失敗などを拾ってくれるだけです。でもシグナルなら一般保護例外を拾ってくれます。これはOSの機能だからです。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?8acaa2e)
No.2
- 回答日時:
あぁ、それから、シグナルは、他のプロセスから該当プロセスにシグナルを送ることができますが(raise()などで、自分でも送れますけど^^)、例外はたぶん標準的な方法では無理でしょう。
あと、シグナルはハンドラで処理した後、シグナルを受け取った処理ポイントに戻りますが(システムコール中にシグナルを受けた場合や、非アトミック的な操作中にシグナルを受けた場合など、いろいろと複雑ですが)、例外は例外ハンドラで処理しても例外を投げたところのポイントへは戻りません。シグナルはできれば使わないほうがいいです。使うならきちんとした書籍を読んで理解して、処理系・環境依存の動作などを確認して使うのがいいと思います。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?8acaa2e)
No.1
- 回答日時:
シグナルは非同期的ですが、例外は同期的です。
C++が言語的にサポートしてるのは例外で、スタックの巻き戻し時にローカル変数のデストラクタが起動されることになってます。例外処理で間に合うのなら、シグナルは使わないほうがいいと思います。ちなみに、C言語のライブラリには、C++の例外処理と似たようなものに、longjmp() がありますけど、こちらは、スタックの巻き戻しのみを行うものだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(悩み相談・人生相談) シグナル フォー ヘルプ っていうハンドサイン あるじゃないですか、( ´ᐞ` ) このハンドサイン 1 2022/05/30 19:47
- SEO Googleアナリティクスでの設定について 1 2023/07/12 09:07
- FX・外国為替取引 ダウ理論の転換に関するインジケーター 1 2022/11/05 06:35
- 債券・証券 金融緩和による純負債への影響について 1 2023/03/12 14:01
- 生物学 大至急お願いします。 レポート課題について質問です。参考程度にしたいです。 1. 遺伝子という言葉の 4 2023/01/20 14:55
- その他(教育・科学・学問) ある人が話終えてから、相手が話し始めるまでにかかる時間(応答時間)が0.25秒以下だと仲が良いという 2 2022/10/20 09:43
- 日本語 日本人の大半は英語が難しい言語だと感じるそうですが 8 2023/04/14 18:16
- カップル・彼氏・彼女 デートDVかわからない 6 2023/06/06 16:11
- 医学 「共刺激シグナルがないとT細胞は( )になってしまう。」この穴埋めを教えて下さい! 4 2022/06/20 15:11
- 環境学・エコロジー 地球の限界が目に見えるようなサイン(シグナル)は身近でいうとどこで感じますか?? 2 2022/04/25 20:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
C++ ってなんて読む?
-
UNITY Float型の接尾辞fって
-
Excelの開発言語ってなんですか?
-
TANDEM言語ってあるんですか?
-
COBOLで文字タイプを数字...
-
C言語とhtmlの違いを どな...
-
Windowsで、システム上同じ言語...
-
VBSとWSHは読み方が違うだけで...
-
vbaとc言語の関連性について
-
TO_CHARで小数点以下がある場合...
-
COBOLでのNOT = の AND条件
-
C言語から呼び出し可能なXM...
-
ソフトの勉強
-
高等学校でのプログラミング言語
-
プログラムからアイコンファイ...
-
UWSCはどのプログラミング言語?
-
verilogの勉強ってどうやってし...
-
プログラムに書かれる"%"記号の...
-
Solve()とは、なんですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
プログラム言語について c言語...
-
プログラムに書かれる"%"記号の...
-
C言語とhtmlの違いを どな...
-
vbaとc言語の関連性について
-
AIって何のソフトで作っている...
-
UNITY Float型の接尾辞fって
-
COBOLでのNOT = の AND条件
-
TO_CHARで小数点以下がある場合...
-
COBOLで文字タイプを数字...
-
プログラム言語について プログ...
-
C++における継続行
-
swift言語の最適化 swift最適化...
-
VBSとWSHは読み方が違うだけで...
-
C++ ってなんて読む?
-
web2.0以前のインターネットで...
-
Excel VBAで文字化けする (英語...
-
VBSでDim、Private、Publicの違い
-
HTMLとC++で、どんなホームペー...
-
Pythonって何を意識した言語な...
おすすめ情報