Cライブラリ関数 -pause()
pauseこの関数はC標準ライブラリの関数で、シグナルを捕捉するまでプロセスを一時停止(実行を中断)させるために使用されます。この関数は、<unistd.h>ヘッダーファイル内で定義されています。
構文
int pause(void);
パラメータ
pauseこの関数はパラメータを受け取りません。
戻り値
- 成功時
pauseプロセスがシグナルハンドラによって中断されるため、この関数は戻りません。 - 失敗時は-1を返し、
errnoerrnoをEINTRに設定します。EINTRこれは関数がシグナルによって中断されたことを示します。
例
以下は、...を使用したpause関数のサンプルプログラムです。このプログラムはシグナルハンドラを設定し、...を捕捉するとSIGINTシグナル(通常はCtrl+Cでトリガー)を受信すると、一時停止を解除します。
例
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// シグナルハンドラ
void handle_sigint(int sig) {
printf("Caught signal %d\n", sig);
}
int main() {
// SIGINTのシグナルハンドラを設定
signal(SIGINT, handle_sigint);
// プロセスを一時停止し、シグナルを待機
printf("Waiting for SIGINT (press Ctrl+C)...\n");
pause();
printf("Exiting...\n");
return 0;
}
#include <signal.h>
#include <unistd.h>
// シグナルハンドラ
void handle_sigint(int sig) {
printf("Caught signal %d\n", sig);
}
int main() {
// SIGINTのシグナルハンドラを設定
signal(SIGINT, handle_sigint);
// プロセスを一時停止し、シグナルを待機
printf("Waiting for SIGINT (press Ctrl+C)...\n");
pause();
printf("Exiting...\n");
return 0;
}
プログラムをコンパイルして実行すると、出力は次のようになります:
Waiting for SIGINT (press Ctrl+C)...
Ctrl+Cを押すと(送信されるSIGINTシグナル)、出力は次のようになります:
解説
signal(SIGINT, handle_sigint);:設定しますSIGINTのシグナルハンドラを...に設定します。handle_sigint。pause();:プロセスを一時停止し、シグナルが届くのを待ちます。...を捕捉するとSIGINTシグナルを受信したとき、handle_sigint関数が呼び出されます。- シグナルハンドラの実行後、
pause関数は-1を返し、プログラムは後続のコードを実行し続けます。
注意事項
pauseこの関数は通常、シグナル駆動のプログラムで、プロセスを一時停止して特定のシグナルを待つために使用されます。- に
pause関数の一時停止中、プロセスの実行はシグナルを捕捉するまで中断されます。 - シグナルを処理する際はシグナル安全性に注意してください。シグナルハンドラはできるだけ短くし、安全な操作のみを実行する必要があります。
C標準ライブラリ - <signal.h>