Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions reference/csignal.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

| 名前 | 説明 | 対応バージョン |
|------|------|----------------|
| `SIG_DFL` | デフォルト動作を指定する | | |
| `SIG_ERR` | `signal`関数が失敗したことを示す戻り値 | |
| `SIG_IGN` | シグナルを無視する | |
| [`SIG_DFL`](csignal/sig_dfl.md) | デフォルト動作を指定する | |
| [`SIG_ERR`](csignal/sig_err.md) | `signal`関数が失敗したことを示す戻り値 | |
| [`SIG_IGN`](csignal/sig_ign.md) | シグナルを無視する | |

### シグナル番号を表すマクロ

Expand Down
57 changes: 57 additions & 0 deletions reference/csignal/sig_dfl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# SIG_DFL
* csignal[meta header]
* macro[meta id-type]

```cpp
#define SIG_DFL see below
```

## 概要
`signal`関数に渡される引数として、シグナルハンドラをデフォルトに設定するマクロ。

シグナル受信時に`signal`関数で`SIG_DFL`が指定されている場合、そのシグナルに対する実装定義のデフォルト処理が実行される。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

これは用途を記載したほうがいい気がしました。
シグナルハンドラーの登録を解除するものですよね。
サンプルコードもそのような用途を説明するものだとよいかと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変更しました.


## 例
```cpp example
#include <csignal>
#include <iostream>
#include <thread>
#include <chrono>

volatile std::sig_atomic_t flag = 0;

void handler(int)
{
flag = 1;
}

int main()
{
std::signal(SIGINT, handler);

std::cout << "Press Ctrl+C (handled)" << std::endl;
while (!flag) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

// デフォルトに戻す
std::signal(SIGINT, SIG_DFL);
std::cout << "Press Ctrl+C again (default action)" << std::endl;
for (;;) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
```

* SIG_DFL[color ff0000]
* std::signal[color ff0000]

### 出力

```
Press Ctrl+C (handled)
Press Ctrl+C again (default action)
```

## 関連項目
- [`signal`](/reference/csignal/signal.md)
52 changes: 52 additions & 0 deletions reference/csignal/sig_err.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# SIG_ERR
* csignal[meta header]
* macro[meta id-type]

```cpp
#define SIG_ERR see below
```

## 概要
`signal`関数の戻り値で、シグナルハンドラの設定に失敗したことを示す値。

`signal`関数が失敗した場合、この値が返される。

## 例
```cpp example
#include <csignal>
#include <iostream>
#include <thread>
#include <chrono>

volatile std::sig_atomic_t flag = 0;

void signal_handler(int sig)
{
flag = 1;
}

int main()
{
if (std::signal(SIGINT, signal_handler) == SIG_ERR) {
std::cerr << "Failed to set signal handler" << std::endl;
return 1;
}
std::cout << "Signal handler set successfully" << std::endl;
while (!flag) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
return 0;
}
```

* SIG_ERR[color ff0000]
* std::signal[color ff0000]

### 出力例

```
Signal handler set successfully
```

## 関連項目
- [`signal`](/reference/csignal/signal.md)
43 changes: 43 additions & 0 deletions reference/csignal/sig_ign.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# SIG_IGN
* csignal[meta header]
* macro[meta id-type]

```cpp
#define SIG_IGN see below
```

## 概要
`signal`関数に渡される引数として、指定されたシグナルを無視させるマクロ。

シグナル受信時に`signal`関数で`SIG_IGN`が指定されている場合、そのシグナルは無視される。

## 例
```cpp example
#include <csignal>
#include <iostream>
#include <thread>

int main()
{
std::signal(SIGINT, SIG_IGN);
// Ctrl+Cを押してもプログラムは続行する
for (int i = 0; i < 10; ++i) {
std::cout << i << " " << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
std::cout << std::endl;
return 0;
}
```

* SIG_IGN[color ff0000]
* std::signal[color ff0000]

### 出力

```
0 1 2 3 4 5 6 7 8 9
```

## 関連項目
- [`signal`](/reference/csignal/signal.md)