File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1616
1717| 名前 | 説明 | 対応バージョン |
1818| ------| ------| ----------------|
19- | ` SIG_DFL ` | デフォルト動作を指定する | | |
20- | ` SIG_ERR ` | ` signal ` 関数が失敗したことを示す戻り値 | |
21- | ` SIG_IGN ` | シグナルを無視する | |
19+ | [ ` SIG_DFL ` ] ( csignal/sig_dfl.md ) | デフォルト動作を指定する | |
20+ | [ ` SIG_ERR ` ] ( csignal/sig_err.md ) | ` signal ` 関数が失敗したことを示す戻り値 | |
21+ | [ ` SIG_IGN ` ] ( csignal/sig_ign.md ) | シグナルを無視する | |
2222
2323### シグナル番号を表すマクロ
2424
Original file line number Diff line number Diff line change 1+ # SIG_DFL
2+ * csignal[ meta header]
3+ * macro[ meta id-type]
4+
5+ ``` cpp
6+ #define SIG_DFL see below
7+ ```
8+
9+ ## 概要
10+ `signal`関数に渡される引数として、シグナルハンドラをデフォルトに設定するマクロ。
11+
12+ シグナル受信時に`signal`関数で`SIG_DFL`が指定されている場合、そのシグナルに対する実装定義のデフォルト処理が実行される。
13+
14+ ## 例
15+ ```cpp example
16+ #include <csignal>
17+ #include <iostream>
18+ #include <thread>
19+ #include <chrono>
20+
21+ volatile std::sig_atomic_t flag = 0;
22+
23+ void handler(int)
24+ {
25+ flag = 1;
26+ }
27+
28+ int main()
29+ {
30+ std::signal(SIGINT, handler);
31+
32+ std::cout << "Press Ctrl+C (handled)" << std::endl;
33+ while (!flag) {
34+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
35+ }
36+
37+ // デフォルトに戻す
38+ std::signal(SIGINT, SIG_DFL);
39+ std::cout << "Press Ctrl+C again (default action)" << std::endl;
40+ for (;;) {
41+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
42+ }
43+ }
44+ ```
45+ * SIG_DFL[color ff0000]
46+ * std::signal[link /reference/csignal/signal.md]
47+
48+ ### 出力
49+
50+ ```
51+ Press Ctrl+C (handled)
52+ Press Ctrl+C again (default action)
53+ ```
54+
55+ ## 関連項目
56+ - [`signal`](/reference/csignal/signal.md)
Original file line number Diff line number Diff line change 1+ # SIG_ERR
2+ * csignal[ meta header]
3+ * macro[ meta id-type]
4+
5+ ``` cpp
6+ #define SIG_ERR see below
7+ ```
8+
9+ ## 概要
10+ `signal`関数の戻り値で、シグナルハンドラの設定に失敗したことを示す値。
11+
12+ `signal`関数が失敗した場合、この値が返される。
13+
14+ ## 例
15+ ```cpp example
16+ #include <csignal>
17+ #include <iostream>
18+ #include <thread>
19+ #include <chrono>
20+
21+ volatile std::sig_atomic_t flag = 0;
22+
23+ void signal_handler(int sig)
24+ {
25+ flag = 1;
26+ }
27+
28+ int main()
29+ {
30+ if (std::signal(SIGINT, signal_handler) == SIG_ERR) {
31+ std::cerr << "Failed to set signal handler" << std::endl;
32+ return 1;
33+ }
34+ std::cout << "Signal handler set successfully" << std::endl;
35+ while (!flag) {
36+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
37+ }
38+ return 0;
39+ }
40+ ```
41+ * SIG_ERR[color ff0000]
42+ * std::signal[link /reference/csignal/signal.md]
43+
44+ ### 出力例
45+
46+ ```
47+ Signal handler set successfully
48+ ```
49+
50+ ## 関連項目
51+ - [`signal`](/reference/csignal/signal.md)
Original file line number Diff line number Diff line change 1+ # SIG_IGN
2+ * csignal[ meta header]
3+ * macro[ meta id-type]
4+
5+ ``` cpp
6+ #define SIG_IGN see below
7+ ```
8+
9+ ## 概要
10+ `signal`関数に渡される引数として、指定されたシグナルを無視させるマクロ。
11+
12+ シグナル受信時に`signal`関数で`SIG_IGN`が指定されている場合、そのシグナルは無視される。
13+
14+ ## 例
15+ ```cpp example
16+ #include <csignal>
17+ #include <iostream>
18+ #include <thread>
19+ #include <chrono>
20+
21+ int main()
22+ {
23+ std::signal(SIGINT, SIG_IGN);
24+ // Ctrl+Cを押してもプログラムは続行する
25+ for (int i = 0; i < 10; ++i) {
26+ std::cout << i << " " << std::flush;
27+ std::this_thread::sleep_for(std::chrono::milliseconds(500));
28+ }
29+ std::cout << std::endl;
30+ return 0;
31+ }
32+ ```
33+ * SIG_IGN[color ff0000]
34+ * std::signal[link /reference/csignal/signal.md]
35+
36+ ### 出力
37+
38+ ```
39+ 0 1 2 3 4 5 6 7 8 9
40+ ```
41+
42+ ## 関連項目
43+ - [`signal`](/reference/csignal/signal.md)
You can’t perform that action at this time.
0 commit comments