Movatterモバイル変換


[0]ホーム

URL:


Skip Navigation Links
Exit Print View
Link to oracle.comman pages section 2: System Calls    Oracle Solaris 11 Information Library
Oracle Technology Network
Library
PDF
Print View
Feedback
search filter icon
search icon
 Search Scope:

Document Information

Preface

Introduction

System Calls

access(2)

acct(2)

acl(2)

adjtime(2)

alarm(2)

brk(2)

chdir(2)

chmod(2)

chown(2)

chroot(2)

close(2)

creat(2)

dup(2)

exec(2)

execl(2)

execle(2)

execlp(2)

execv(2)

execve(2)

execvex(2)

execvp(2)

_Exit(2)

_exit(2)

exit(2)

faccessat(2)

facl(2)

fchdir(2)

fchmod(2)

fchmodat(2)

fchown(2)

fchownat(2)

fchroot(2)

fcntl(2)

fexecve(2)

fgetlabel(2)

fork1(2)

fork(2)

forkall(2)

forkallx(2)

forkx(2)

fpathconf(2)

fstat(2)

fstatat(2)

fstatvfs(2)

futimens(2)

futimesat(2)

getacct(2)

getcontext(2)

getdents(2)

getegid(2)

geteuid(2)

getgid(2)

getgroups(2)

getisax(2)

getitimer(2)

getlabel(2)

getmsg(2)

getpflags(2)

getpgid(2)

getpgrp(2)

getpid(2)

getpmsg(2)

getppid(2)

getppriv(2)

getprojid(2)

getrctl(2)

getrlimit(2)

getsid(2)

gettaskid(2)

getuid(2)

getustack(2)

ioctl(2)

issetugid(2)

kill(2)

lchown(2)

link(2)

linkat(2)

llseek(2)

lseek(2)

lstat(2)

_lwp_cond_broadcast(2)

_lwp_cond_reltimedwait(2)

_lwp_cond_signal(2)

_lwp_cond_timedwait(2)

_lwp_cond_wait(2)

_lwp_continue(2)

_lwp_info(2)

_lwp_kill(2)

_lwp_mutex_lock(2)

_lwp_mutex_trylock(2)

_lwp_mutex_unlock(2)

_lwp_self(2)

_lwp_sema_init(2)

_lwp_sema_post(2)

_lwp_sema_trywait(2)

_lwp_sema_wait(2)

_lwp_suspend(2)

memcntl(2)

meminfo(2)

mincore(2)

mkdir(2)

mkdirat(2)

mknod(2)

mknodat(2)

mmap(2)

mmapobj(2)

mount(2)

mprotect(2)

msgctl(2)

msgget(2)

msgids(2)

msgrcv(2)

msgsnap(2)

msgsnd(2)

munmap(2)

nice(2)

ntp_adjtime(2)

ntp_gettime(2)

open(2)

openat(2)

pathconf(2)

pause(2)

pcsample(2)

pipe(2)

poll(2)

p_online(2)

ppoll(2)

pread(2)

priocntl(2)

priocntlset(2)

processor_bind(2)

processor_info(2)

profil(2)

pset_assign(2)

pset_bind(2)

pset_create(2)

pset_destroy(2)

pset_getattr(2)

pset_info(2)

pset_list(2)

pset_setattr(2)

putacct(2)

putmsg(2)

putpmsg(2)

pwrite(2)

read(2)

readlink(2)

readlinkat(2)

readv(2)

rename(2)

renameat(2)

resolvepath(2)

rmdir(2)

sbrk(2)

semctl(2)

semget(2)

semids(2)

semop(2)

semtimedop(2)

setcontext(2)

setegid(2)

seteuid(2)

setgid(2)

setgroups(2)

setitimer(2)

setpflags(2)

setpgid(2)

setpgrp(2)

setppriv(2)

setrctl(2)

setregid(2)

setreuid(2)

setrlimit(2)

setsid(2)

settaskid(2)

setuid(2)

setustack(2)

shmadv(2)

shmat(2)

shmctl(2)

shmdt(2)

shmget(2)

shmids(2)

shmop(2)

sigaction(2)

sigaltstack(2)

sigpending(2)

sigprocmask(2)

sigsend(2)

sigsendset(2)

sigsuspend(2)

sigwait(2)

__sparc_utrap_install(2)

stat(2)

statvfs(2)

stime(2)

swapctl(2)

symlink(2)

symlinkat(2)

sync(2)

sysfs(2)

sysinfo(2)

time(2)

times(2)

uadmin(2)

ulimit(2)

umask(2)

umount(2)

umount2(2)

uname(2)

unlink(2)

unlinkat(2)

ustat(2)

utime(2)

utimensat(2)

utimes(2)

uucopy(2)

vfork(2)

vforkx(2)

vhangup(2)

waitid(2)

wracct(2)

write(2)

writev(2)

yield(2)

sigwait

- wait until a signal is posted

Synopsis

#include <signal.h>intsigwait(sigset_t *set);

Standard conforming

cc [flag ... ]file ...-D_POSIX_PTHREAD_SEMANTICS [library...]#include <signal.h>intsigwait(const sigset_t *set,int *sig);

Description

Thesigwait() function selects a signal inset that is pending onthe calling thread. If no signal inset is pending,sigwait() blocksuntil a signal inset becomes pending. The selected signal is cleared fromthe set of signals pending on the calling thread and the numberof the signal is returned, or in the standard–conforming version (seestandards(5))placed insig. The selection of a signal inset is independentof the signal mask of the calling thread. This means a threadcan synchronously wait for signals that are being blocked by the signalmask of the calling thread . To ensure that only the caller receivesthe signals defined inset, all threads should have signals insetmasked including the calling thread.

If more than one thread is usingsigwait() to wait for thesame signal, no more than one of these threads returns fromsigwait()with the signal number. If more than a single thread is blockedinsigwait() for a signal when that signal is generated for the process,it is unspecified which of the waiting threads returns fromsigwait(). Ifthe signal is generated for a specific thread, as bypthread_kill(3C), onlythat thread returns.

Should any of the multiple pending signals in the rangeSIGRTMIN toSIGRTMAX be selected, it will be the lowest numbered one. The selectionorder between realtime and non-realtime signals, or between multiple pending non-realtime signals,is unspecified.

Return Values

Upon successful completion, the default version ofsigwait() returns a signal number;the standard–conforming version returns0 and stores the received signal number atthe location pointed to bysig. Otherwise, the default version returns -1 andsets errno to indicate an error; the standard-conforming version returns an errornumber to indicate the error.

Errors

Thesigwait() function will fail if:

EFAULT

Theset argument points to an invalid address.

EINTR

The wait was interrupted by an unblocked, caught signal.

EINVAL

Theset argument contains an unsupported signal number.

Examples

Example 1 Creating a thread to handle receipt of a signal

The following sample C code creates a thread to handle the receiptof a signal. More specifically, it catches the asynchronously generated signal,SIGINT.

/********************************************************************** compile with -D_POSIX_PTHREAD_SEMANTICS switch;* required by sigwait()** sigint thread handles delivery of signal. uses sigwait( ) to wait* for SIGINT signal.*********************************************************************/#include <pthread.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <synch.h>static void    *threadTwo(void *);static void    *threadThree(void *);static void    *sigint(void *);sigset_t       signalSet;void *main(void){    pthread_t    t;    pthread_t    t2;    pthread_t    t3;        sigfillset ( &signalSet );    /*     * Block signals in initial thread. New threads will     * inherit this signal mask.     */    pthread_sigmask ( SIG_BLOCK, &signalSet, NULL );        printf("Creating threads\n");        pthread_create(&t, NULL, sigint, NULL);    pthread_create(&t2, NULL, threadTwo, NULL);    pthread_create(&t3, NULL, threadThree, NULL);        printf("##################\n");    printf("press CTRL-C to deliver SIGINT to sigint thread\n");    printf("##################\n");        pthread_exit((void *)0);}static void *threadTwo(void *arg){    printf("hello world, from threadTwo [tid: %d]\n",                            pthread_self());    printf("threadTwo [tid: %d] is now complete and exiting\n",                            pthread_self());    pthread_exit((void *)0);}static void *threadThree(void *arg){    printf("hello world, from threadThree [tid: %d]\n",                            pthread_self());    printf("threadThree [tid: %d] is now complete and exiting\n",                            pthread_self());    pthread_exit((void *)0);}void *sigint(void *arg){    int    sig;    int    err;        printf("thread sigint [tid: %d] awaiting SIGINT\n",                            pthread_self());        /*    /* use standard-conforming sigwait() -- 2 args: signal set, signum     */    err = sigwait ( &signalSet, &sig );        /* test for SIGINT; could catch other signals */    if (err || sig != SIGINT)        abort();        printf("\nSIGINT signal %d caught by sigint thread [tid: %d]\n",                            sig, pthread_self());    pthread_exit((void *)0);}

Attributes

Seeattributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Committed
MT-Level
Async-Signal-Safe
Standard

See Also

sigaction(2),sigpending(2),sigprocmask(2),sigsuspend(2),pthread_create(3C),pthread_kill(3C),pthread_sigmask(3C),signal.h(3HEAD),attributes(5),standards(5)

Notes

Thesigwait() function cannot be used to wait for signals that cannotbe caught (seesigaction(2)). This restriction is silently imposed by the system.

Solaris 2.4 and earlier releases provided asigwait() facility as specified inPOSIX.1c Draft 6. The final POSIX.1c standard changed the interface as describedabove. Support for the Draft 6 interface is provided for compatibility onlyand may not be supported in future releases. New applications and libraries shoulduse the standard–conforming interface.

Copyright © 2011, Oracle and/or its affiliates. All rights reserved.Legal Notices
PreviousNext

[8]ページ先頭

©2009-2025 Movatter.jp