6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"header": ["csignal"], "namespace": ["std"], "id-type": ["function"]}, "sources": [{"id": "016b4ff983a4c06cd1093c0cd2a4aafcf1666d91 ", "source": "#include <csignal>\n#include <iostream>\n\nvolatile std::sig_atomic_t flag = 0;\n\nvoid signal_handler(int sig)\n{\n flag = 1;\n // std::cout << \"signal: \" << sig << std::endl; \u672a\u5b9a\u7fa9\u52d5\u4f5c\n}\n\nint main()\n{\n std::signal(SIGINT, signal_handler);\n while(!flag){\n //\u51e6\u7406\n }\n if(flag)\n {\n std::cout << \"catch SIGINT\" << std::endl;\n }\n return 0;\n}\n\n"}], "page_id": ["reference", "csignal", "signal"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"header": ["csignal"], "namespace": ["std"], "id-type": ["function"]}, "sources": [{"id": "3fe86ef5957f809cf0b9064ade4f24bfc0d42773 ", "source": "#include <csignal>\n#include <iostream>\n\nvolatile std::sig_atomic_t flag = 0;\n\nvoid signal_handler(int sig)\n{\n flag = 1;\n // std::cout << \"signal: \" << sig << std::endl; \u672a\u5b9a\u7fa9\u52d5\u4f5c\n}\n\nint main()\n{\n std::signal(SIGINT, signal_handler);\n while (!flag) {\n //\u51e6\u7406\n }\n if (flag) {\n std::cout << \"caught SIGINT\" << std::endl;\n }\n return 0;\n}\n\n"}], "page_id": ["reference", "csignal", "signal"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(UTC):
191- < span itemprop ="datePublished " content ="2026-01-18T14:39:37 ">
192- 2026年01月18日 14時39分37秒
191+ < span itemprop ="datePublished " content ="2026-01-19T13:24:22 ">
192+ 2026年01月19日 13時24分22秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
214214
215215 < div class ="identifier-type "> function</ div > < div class ="header "> <csignal></ div > < h1 itemprop ="name "> < span class ="namespace " title ="namespace std "> std::</ span > < span class ="token "> signal</ span > </ h1 >
216216< div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="p "> {</ span >
217- < span class ="n "> signal</ span > < span class ="o "> -</ span > < span class ="n "> handler</ span > < span class ="o "> *</ span > < span class ="n "> signal</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> sig</ span > < span class ="p "> ,</ span > < span class ="n "> signal</ span > < span class ="o "> -</ span > < span class ="n "> handler</ span > < span class ="n "> func</ span > < span class ="p "> );</ span >
217+ < span class ="k "> extern</ span > < span class ="s "> "C"</ span > < span class ="k "> using</ span > < span class ="n "> < i > signal-handler</ i > </ span > < span class ="o "> =</ span > < span class ="kt "> void</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="p "> );</ span > < span class ="c1 "> // exposition only</ span >
218+ < span class ="n "> < i > signal-handler</ i > </ span > < span class ="o "> *</ span > < span class ="nf "> signal</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> sig</ span > < span class ="p "> ,</ span > < span class ="n "> < i > signal-handler</ i > </ span > < span class ="o "> *</ span > < span class ="n "> func</ span > < span class ="p "> );</ span >
218219< span class ="p "> }</ span >
219220</ code > </ pre > </ div >
220221</ p >
@@ -236,18 +237,23 @@ <h2>引数</h2>
236237< h3 > シグナルハンドラ関数の制約</ h3 >
237238< p > シグナルハンドラ関数は< a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > を持たず、< code > int</ code > 型の引数を持つ。
238239この引数にはシグナル番号が格納される。</ p >
239- < p > また、以下の処理以外の動作をシグナルハンドラ内で行うとき、その < a class ="cpprefjp-defined-word " data-desc ="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。 " href ="../../implementation-compliance.html#dfn-undefined-behavior "> 動作は未定義 </ a > 。</ p >
240+ < p > シグナルハンドラ内で以下以外の処理を行うことは < a class ="cpprefjp-defined-word " data-desc ="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。 " href ="../../implementation-compliance.html#dfn-undefined-behavior "> 未定義動作 </ a > である 。</ p >
240241< ul >
241- < li > < code > volatile std::sig_atomic_t</ code > への単純な読み書き</ li >
242- < li > < code > _Exit</ code > 関数と< code > abort</ code > 関数</ li >
242+ < li > < code > volatile std::sig_atomic_t</ code > オブジェクトへの代入</ li >
243+ < li > < code > abort</ code > 関数</ li >
244+ < li > < code > _Exit</ code > 関数</ li >
245+ < li > < code > quick_exit</ code > 関数</ li >
246+ < li > < code > atomic</ code > 引数がロックフリーである場合の< code > <stdatomic.h></ code > 内の関数</ li >
247+ < li > 任意の< code > atomic</ code > 引数を持つ< code > atomic_is_lock_free</ code > 関数</ li >
248+ < li > < code > signal</ code > 関数(ただし、ハンドラを起こしたシグナル番号に対する呼び出しに限る)</ li >
243249</ ul >
244250< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > </ h2 >
245251< p > 成功した場合、指定されたシグナルに対する直前のハンドラを返す。
246252それ以外の場合は< code > SIG_ERR</ code > を返す</ p >
247253< h2 > 備考</ h2 >
248254< p > マルチスレッド内でのこの関数の< a class ="cpprefjp-defined-word " data-desc ="未定義の動作。処理系は予期せぬ動作をする可能性がある。要するに動作保証対象外。undefined behavior (UB)。 " href ="../../implementation-compliance.html#dfn-undefined-behavior "> 動作は未定義</ a > 。</ p >
249255< h2 > 例</ h2 >
250- < p > < div class ="yata " id ="016b4ff983a4c06cd1093c0cd2a4aafcf1666d91 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> <csignal></ span > < span class ="cp "> </ span >
256+ < p > < div class ="yata " id ="3fe86ef5957f809cf0b9064ade4f24bfc0d42773 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> <csignal></ span > < span class ="cp "> </ span >
251257< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
252258
253259< span class ="k "> volatile</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="kt "> sig_atomic_t</ span > < span class ="n "> flag</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span >
@@ -261,19 +267,18 @@ <h2>例</h2>
261267< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
262268< span class ="p "> {</ span >
263269 < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> signal</ span > < span class ="p "> (</ span > < span class ="n "> SIGINT</ span > < span class ="p "> ,</ span > < span class ="n "> signal_handler</ span > < span class ="p "> );</ span >
264- < span class ="k "> while</ span > < span class ="p "> (</ span > < span class ="o "> !</ span > < span class ="n "> flag</ span > < span class ="p "> ){</ span >
270+ < span class ="k "> while</ span > < span class ="p "> (</ span > < span class ="o "> !</ span > < span class ="n "> flag</ span > < span class ="p "> )</ span > < span class =" p " > {</ span >
265271 < span class ="c1 "> //処理</ span >
266272 < span class ="p "> }</ span >
267- < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> flag</ span > < span class ="p "> )</ span >
268- < span class ="p "> {</ span >
269- < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "catch SIGINT"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
273+ < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> flag</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
274+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "caught SIGINT"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
270275 < span class ="p "> }</ span >
271276 < span class ="k "> return</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span >
272277< span class ="p "> }</ span >
273278</ code > </ pre > </ div >
274279</ div > </ p >
275280< h3 > 出力例</ h3 >
276- < p > < pre > < code > catch SIGINT
281+ < p > < pre > < code > caught SIGINT
277282</ code > </ pre > </ p > </ div >
278283
279284 </ div >
0 commit comments