前へ | 次へ | 目次 | 索引 |
ブロックされているシグナルのセットをアトミックに変更し,シグナルを待ちます。
#include <signal.h>int sigsuspend (const sigset_t *signal_mask);
signal_mask
シグナルのセットへのポインタ。
sigsuspend関数は,プロセスのシグナル・マスクを, signal_mask 引数がポイントするシグナルのセットに置き換えます。その後,アクションとしてシグナル・キャッチ関数を実行するか,プロセスを終了させるシグナルが配信されるまで,プロセスの実行を中断します。 sigsuspend関数では, SIGKILL シグナルや SIGSTOP シグナルをブロックすることはできません。プログラムがこれらのシグナルのブロックを試みた場合でも, sigsuspendはエラーを発生させません。シグナルの配信によってプロセスが終了する場合, sigsuspendは返りません。シグナルの配信によってシグナル・キャッチ関数が実行される場合, sigsuspendはシグナル・キャッチ関数が返った後に返り,シグナル・マスクは sigsuspendの呼び出しの前のセットに復元されます。
sigsuspend関数は,1 つのアトミックな操作として,シグナル・マスクを設定し,ブロックされていないシグナルを待ちます。つまり,マスクの設定とシグナルを待つ操作の間にシグナルを発生させることはできません。プログラムが sigprocmaskSIG_SETMASK と sigsuspendを別々に呼び出した場合,これらの関数の間に発生したシグナルは,通常は sigsuspendには意識されません。
通常の用途では,シグナルはクリティカル・セクションの先頭で, sigprocmask関数を使ってブロックされます。その後,プロセスは実行すべき作業があるかどうかを調べます。作業がなければ,プロセスは,前に sigprocmaskから返されたマスクを使って sigsuspendを呼び出して,作業を待ちます。
シグナルが呼び出し元プロセスによってキャッチされ,制御がシグナル・ハンドラから返った場合,呼び出し元プロセスは sigsuspendの後から実行を再開します。 sigsuspendはつねに値 - 1 を返し, errnoを EINTR に設定します。
sigpauseと sigprocmaskも参照してください。
呼び出し元スレッドを中断し,シグナル通知が到着するのを待ちます。
#include <signal.h>int sigtimedwait (const sigset_t set, siginfo_t *info, const struct timespec *timeout);
set
待機するシグナルのセット。info
siginfo構造体へのポインタ。この構造体には,シグナルをポストする際に指定されたアプリケーション定義データなど,シグナルを示すデータが格納されます。timeout
待機する際のタイムアウト時間。 timeout が NULL の場合,この引数は無視されます。
sigtimedwait関数は, sigwaitinfo関数と同じ動作を行います。ただし,set で指定されたシグナルが保留されていない場合, sigtimedwaitは timeout が指す timespec構造体で指定された時間だけ待機します。 timeout が指す timespec構造体の値がゼロで, set で指定されたシグナルが保留されていない場合, sigtimedwaitはすぐにエラーで戻ります。sigwaitと sigwaitinfoも参照してください。
シグナル処理についての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2 節を参照してください。
x 成功して終了すると,選択されたシグナル番号が返されます。 - 1 エラーの発生を示します。 errno には,以下のいずれかの値が設定されます。
- EINVAL -- timeout 引数の tv_nsec 値が, 0 より小さいか 10 億以上でした。
- EINTR -- 待機が,ブロックされていないシグナルのキャッチで割り込まれました。
- EAGAIN -- set で指定されたシグナルが,指定されたタイムアウト期間内に生成されませんでした。
特定のシグナルのためのハンドラを永久的に割り当てます。
#include <signal.h>int sigvec (int sigint, struct sigvec *sv, struct sigvec *osv);
sigint
シグナル識別子。sv
sigvec構造体へのポインタ (説明のセクションを参照)。osv
osv が NULL でない場合には,シグナルの以前の処理情報が返されます。
sv が NULL でない場合には,ハンドラ・ルーチンへのポインタ,指定されたシグナルを配信するときに使用されるマスク,およびシグナルを代替スタック上で処理するべきかどうかを示すフラグを含んだ構造体のアドレスを指定します。 sv-->onstack の値が 1 である場合,システムはシグナルを sigstackで指定されたシグナル・スタック上のプロセスに配信します。sigvec関数は,明示的に削除されるかイメージが終了するまで存在を続けるハンドラを設定します。
sigvec構造体は, <signal.h>ヘッダ・ファイルに定義されています。
struct sigvec { int (*handler)(); int mask; int onstack; };
シグナル処理の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2 節を参照してください。
0 呼び出しが成功したことを示します。 - 1 エラーが発生したことを示します。
呼び出し元スレッドを中断し,シグナル通知が到着するのを待ちます。
#include <signal.h>int sigwait (const sigset_t set, int *sig);
set
待機するシグナルのセット。sig
選択されたシグナルのシグナル番号を返します。
sigwait関数は, set 引数内のシグナルの少なくとも 1 つが,呼び出し元プロセスの保留シグナル・セットに含まれるようになるまで,呼び出し元スレッドを中断します。この状態が発生したら,いずれかのシグナルが自動的に選択され,保留シグナル・セットから削除されます。その後,シグナルを識別するシグナル番号が, sig が指すメモリ位置に返されます。sigwait関数が呼び出されたときに, set 引数内のシグナルにブロックされていないものがある場合の動作は,規定されていません。
set 引数は,セット操作関数 sigemptyset, sigfillset, sigaddset,および sigdelsetを使用して作成されます。
sigwait関数が待機している間に,配信可能な (つまり,シグナル・マスクでブロックされていない) シグナルが発生すると,そのシグナルは非同期に処理され,待機状態が中断されます。
sigtimedwaitと sigwaitinfoも参照してください。
シグナル処理についての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2 節を参照してください。
0 成功すると, sigwait は sig が指すメモリ位置に,受信したシグナルのシグナル番号を格納して,0 を返します。 0 以外 エラーの発生を示します。 errno に,次の値が設定されます。
- EINVAL -- set 引数が,不正なシグナル番号,またはサポートされていないシグナル番号を含んでいます。
呼び出し元スレッドを中断し,シグナル通知が到着するのを待ちます。
#include <signal.h>int sigwaitinfo (const sigset_t set, siginfo_t *info);
set
待機するシグナルのセット。info
siginfo構造体へのポインタ。この構造体には,シグナルをポストする際に指定されたアプリケーション定義データなど,シグナルを示すデータが格納されます。
info 引数が NULL の場合, sigwaitinfo関数は, sigwait関数と同じ動作を行います。info 引数が NULL でない場合, sigwaitinfo関数は, sigwait関数と同じ動作を行います。ただし,選択されたシグナル番号は, siginfo構造体の si_signoメンバに格納され,またシグナルの原因が, si_codeメンバに格納されます。選択されたシグナルに,キューイングされている値がある場合,キューイングされている 1 番目の値がキューから外され,その値が info の si_valueメンバに格納されます。シグナルのキューイングに使用されているシステム・リソースは解放され,他のシグナルのキューイングに利用できるようになります。キューイングされている値がない場合, si_valueメンバの内容は未定義です。選択されたシグナルに対して,他にキューイングされているシグナルがない場合は,そのシグナルの保留表示がリセットされます。
sigtimedwaitと sigwaitも参照してください。
シグナル処理についての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 4.2 節を参照してください。
x 成功すると,選択されたシグナル番号が返されます。 - 1 エラーの発生を示します。 errno には,以下のいずれかの値が設定されます。
- EINVAL -- set 引数が,不正なシグナル番号,またはサポートされていないシグナル番号を含んでいます。
- EINTR -- 待機が,ブロックされていないシグナルのキャッチで割り込まれました。
ラジアン単位の引数の正弦を返します。
#include <math.h>double sin (double x);
float sinf (float x); (Alpha only)
long double sinl (long double x); (Alpha only)
double sind (double x); (Alpha only)
float sindf (float x); (Alpha only)
long double sindl (long double x); (Alpha only)
x
浮動小数点数として表現されたラジアン。
sin関数は,ラジアン単位の x の正弦を計算します。sind関数は,度単位の x の正弦を計算します。
x 引数の正弦。 NaN x = ±Infinity or NaN; errno is set to EDOM. 0 アンダフローが発生しました。 errno は ERANGE に設定されます。
引数の双曲線正弦を返します。
#include <math.h>double sinh (double x);
float sinhf (float x); (Alpha only)
long double sinhl (long double x); (Alpha only)
x
実数。
n 引数の双曲線正弦。 HUGE_VAL オーバフローが発生しました。 errno は ERANGE に設定されます。 0 アンダフローが発生しました。 errno は ERANGE に設定されます。 NaN x は NaN です。 errno は EDOM に設定されます。
現在のプロセスの実行を,少なくともその引数が指定した秒数だけ一時停止します。
#include <unistd.h>unsigned int sleep (unsigned seconds); (_DECC_V4_SOURCE)
int sleep (unsigned seconds); (not _DECC_V4_SOURCE)
seconds
秒数。
sleep関数は,指定された秒数だけ,シグナルが受信されるまで,またはプロセスが SYS$WAKE の呼び出しを実行するまでスリープします。SIGALRM シグナルが生成されたが,ブロックまたは無視された場合, sleep関数は返ります。その他のシグナルでは,シグナルがブロックまたは無視されても sleepは返りません。
x プロセスがどれだけ早く実行を再開したかを示す秒数。 0 プロセスが seconds で指定された秒数だけスリープしていた場合。
メモリ内の文字列に対して書式付きの出力を行います。
#include <stdio.h>int snprintf (char *str, size_t n, const char *format_spec, ...);
str
書式付きの出力を受け取る文字列のアドレス。n
str が指すバッファのサイズ。format_spec
書式指定を含んでいる文字列へのポインタ。書式指定と変換文字の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。...
結果として得られる型が,書式指定で与えられた変換指定に対応する式 (オプション)。変換指定がない場合,出力ソースは省略することができます。そうでない場合は,関数呼び出しは変換指定の数以上の出力ソースを持っていなくてはならず,変換指定は出力ソースの型と一致していなくてはなりません。
変換指定は,左から右の順序で出力ソースと対応づけられます。余分な出力ソースがある場合には,無視されます。
snprintf関数は, sprintf関数と同等ですが, str が指すバッファのサイズを指定する n 引数が追加されています。成功して終了すると snprintfは, n が十分に大きい場合に str に書き込まれるバイトの数 (末尾のヌル・バイトは除く) を返します。
n が 0 の場合は,何も書き込まれませんが, n が十分に大きい場合に書き込まれるバイトの数 (末尾のヌル・バイトは除く) が返されます。この場合,str は NULL ポインタでも構いません。 0 以外の場合,n - 1 番目より後の出力バイトは配列には書き込まれず,破棄されます。そして,実際に配列に書き込まれたバイト列の最後にヌル・バイトが書き込まれます。
出力エラーが検出された場合,負の値が返されます。
書式指定と出力ソースについての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。
x n が十分に大きい場合に str に書き込まれるバイトの数 (末尾のヌル・バイトを除く) です。 負の値 出力エラーが発生したことを示します。この関数は, errno を設定します。この関数が設定する errno 値のリストについては, fprintf を参照してください。
メモリ内の文字列に対して書式付きの出力を行います。
#include <stdio.h>int sprintf (char *str, const char *format_spec, ...);
str
書式付きの出力を受け取る文字列のアドレス。この文字列は出力を保持できるだけの大きさを持っているものと仮定されます。format_spec
書式指定を含んでいる文字列へのポインタ。書式指定と変換文字の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。...
結果として得られる型が,書式指定で与えられた変換指定に対応する式 (オプション)。変換指定が与えられなかった場合,出力ソースは省略することができます。そうでない場合は,関数呼び出しは変換指定の数以上の出力ソースを持っていなくてはならず,変換指定は出力ソースの型と一致していなくてはなりません。
変換指定は,左から右の順序で出力ソースと対応づけられます。余分な出力ポインタがある場合には,無視されます。
sprintf関数は,出力の最後にヌル文字 (\0) を付加し, *str から始まる連続したバイト内に置きます。ユーザは,十分な領域を確保しなければなりません。次の変換指定の例を考えてみましょう。
#include <stdio.h> main() { int temp = 4, temp2 = 17; char s[80]; sprintf(s, "The answers are %d, and %d.", temp, temp2); }
この例では,文字列 sは次の内容を持ちます。
The answers are 4, and 17.
書式指定と出力ソースについての詳細は,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 2 章を参照してください。
x 出力文字列に格納される文字の数。最後の null 文字は含みません。 負の値 出力エラーが発生したことを示します。関数は errno を設定します。この関数が設定する errno 値のリストについては, fprintf を参照してください。
前へ | 次へ | 目次 | 索引 |