亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? siglib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
* This routine waits until one of the signals specified in <pSet> is delivered* to the calling thread. It then stores the number of the signal received in* the the location pointed to by <pSig>.** The signals in <pSet> must not be ignored on entrance to sigwait().* If the delivered signal has a signal handler function attached, that* function is not called.** RETURNS: OK, or ERROR on failure.** SEE ALSO: sigtimedwait()*/ int sigwait    (    const sigset_t *pSet,    int *pSig    )    {    struct siginfo info;     if (sigtimedwait(pSet, &info, (struct timespec *)NULL) == ERROR)        return(ERROR);     *pSig = info.si_signo;    return(OK);    }/********************************************************************************** sigvec - install a signal handler** This routine binds a signal handler routine referenced by <pVec> to a* specified signal <sig>.  It can also be used to determine which handler,* if any, has been bound to a particular signal:  sigvec() copies current* signal handler information for <sig> to <pOvec> and does not install a* signal handler if <pVec> is set to NULL (0).** Both <pVec> and <pOvec> are pointers to a structure of type \f3struct* sigvec\fP.  The information passed includes not only the signal handler* routine, but also the signal mask and additional option bits.  The* structure `sigvec' and the available options are defined in signal.h.** RETURNS: OK (0), or ERROR (-1) if the signal number is invalid or the* signal TCB cannot be allocated.** ERRNO: EINVAL, ENOMEM*/int sigvec    (    int			sig,	/* signal to attach handler to */    const struct sigvec	*pVec,	/* new handler information */    struct sigvec	*pOvec	/* previous handler information */    )    {    struct sigaction act, oact;    int retVal;    if (pVec != NULL)	{	act.sa_handler = pVec->sv_handler;	act.sa_mask = pVec->sv_mask;	act.sa_flags = pVec->sv_flags;	retVal = sigaction(sig, &act, &oact);	}    else	retVal = sigaction(sig, NULL, &oact);    if (pOvec != NULL)	{	pOvec->sv_handler = oact.sa_handler;	pOvec->sv_mask = oact.sa_mask;	pOvec->sv_flags = oact.sa_flags;	}    return (retVal);    }/********************************************************************************* sigreturn - early return from a signal handler** NOMANUAL**/void sigreturn    (    struct sigcontext	*pContext    )    {    (void) sigprocmask (SIG_SETMASK, &pContext->sc_mask, 0);    _sigCtxLoad (&pContext->sc_regs);    }/********************************************************************************* sigsetmask - set the signal mask** This routine sets the calling task's signal mask to a specified value.* A one (1) in the bit mask indicates that the specified signal is blocked* from delivery.  Use the macro SIGMASK to construct the mask for a specified* signal number.** RETURNS: The previous value of the signal mask.** SEE ALSO: sigprocmask()*/ int sigsetmask    (    int			mask	/* new signal mask */    )    {    sigset_t in;    sigset_t out;    in = (sigset_t) mask;    (void) sigprocmask (SIG_SETMASK, &in, &out);    return ((int) out);    }/********************************************************************************* sigblock - add to a set of blocked signals** This routine adds the signals in <mask> to the task's set of blocked signals.* A one (1) in the bit mask indicates that the specified signal is blocked* from delivery.  Use the macro SIGMASK to construct the mask for a specified* signal number.** RETURNS: The previous value of the signal mask.** SEE ALSO: sigprocmask()*/ int sigblock    (    int			mask	/* mask of additional signals to be blocked */    )    {    sigset_t in;    sigset_t out;    in = (sigset_t) mask;    (void) sigprocmask (SIG_BLOCK, &in, &out);    return ((int) out);    }/********************************************************************************* raise - send a signal to the caller's task** This routine sends the signal <signo> to the task invoking the call.** RETURNS: OK (0), or ERROR (-1) if the signal number or task ID is invalid.** ERRNO: EINVAL*/int raise    (    int			signo	/* signal to send to caller's task */    )    {    return (kill ((int) taskIdCurrent, signo));    }/********************************************************************************* kill - send a signal to a task (POSIX)** This routine sends a signal <signo> to the task specified by <tid>.** RETURNS: OK (0), or ERROR (-1) if the task ID or signal number is invalid.** ERRNO: EINVAL*/int kill    (    int			tid,	/* task to send signal to */    int			signo	/* signal to send to task */    )    {    if (!issig (signo))	{	errnoSet (EINVAL);	return (ERROR);	}#ifdef WV_INSTRUMENTATION    /* windview - level 1 event logging */    EVT_OBJ_SIG (EVENT_KILL , 2, signo, tid);#endif    if (kernelState || (INT_CONTEXT () && (int) taskIdCurrent == tid))	{	if (TASK_ID_VERIFY (tid) != OK)	    {	    errnoSet (EINVAL);	    return (ERROR);	    }	excJobAdd ((VOIDFUNCPTR) kill, tid, signo, 0, 0, 0, 0);	return (OK);	}    kernelState = TRUE;				/* KERNEL ENTER */     if (TASK_ID_VERIFY (tid) != OK)		/* verify task */	{	windExit ();				/* KERNEL EXIT */	errnoSet (EINVAL);	return (ERROR);	}    sigWindKill ((WIND_TCB *) tid, signo);	/* send signal */     windExit ();				/* KERNEL EXIT */     return (OK);    }/********************************************************************************* sigqueue - send a queued signal to a task* * The function sigqueue() sends the signal specified by <signo> with* the signal-parameter value specified by <value> to the process* specified by <tid>.** RETURNS: OK (0), or ERROR (-1) if the task ID or signal number is invalid,* or if there are no queued-signal buffers available.** ERRNO: EINVAL EAGAIN*/int sigqueue    (    int			tid,    int			signo,    const union sigval	value    )    {    struct sigpend pend;    if (!issig (signo))	{	errnoSet (EINVAL);	return (ERROR);	}#ifdef WV_INSTRUMENTATION    /* windview - level 1 event logging */    EVT_OBJ_SIG (EVENT_KILL , 2, signo, tid);#endif    if (kernelState || (INT_CONTEXT () && (int) taskIdCurrent == tid))	{	if (TASK_ID_VERIFY (tid) != OK)	    {	    errnoSet (EINVAL);	    return (ERROR);	    }	if (_pSigQueueFreeHead == NULL)	    {	    errnoSet (EAGAIN);	    return (ERROR);	    }	excJobAdd ((VOIDFUNCPTR)sigqueue, tid, signo, value.sival_int, 0, 0, 0);	return (OK);	}    kernelState = TRUE;				/* KERNEL ENTER */     if (TASK_ID_VERIFY (tid) != OK)		/* verify task */	{	windExit ();				/* KERNEL EXIT */	errnoSet (EINVAL);	return (ERROR);	}    if (_pSigQueueFreeHead == NULL)	{	windExit ();				/* KERNEL EXIT */	errnoSet (EAGAIN);	return (ERROR);	}    sigPendInit (&pend);    pend.sigp_info.si_signo = signo;    pend.sigp_info.si_code  = SI_QUEUE;    pend.sigp_info.si_value = value;    sigWindPendKill ((WIND_TCB *) tid, &pend);	/* signal a task */     windExit ();				/* KERNEL EXIT */    return (0);    }/********************************************************************************* sigWrapper - trampoline code to get to users signal handler from kernel**/static void sigWrapper    (    struct sigcontext	*pContext    )    {    int signo = pContext->sc_info.si_signo;    struct sigaction *pAction =	&((taskIdCurrent->pSignalInfo))->sigt_vec[signo];    void (*handler)() = pAction->sa_handler;#ifdef WV_INSTRUMENTATION    /* windview - level 1 event logging */    EVT_OBJ_SIG (EVENT_SIGWRAPPER, 2, signo, taskIdCurrent);#endif    if (pAction->sa_flags & SA_RESETHAND)	(void) signal (signo, SIG_DFL);    if (handler != SIG_DFL && handler != SIG_IGN && handler != SIG_ERR)	{	if (pAction->sa_flags & SA_SIGINFO)	    (*handler) (signo, &pContext->sc_info, pContext);	else	    (*handler) (signo, pContext->sc_info.si_value.sival_int, pContext);	}    sigreturn (pContext);    }/********************************************************************************* sigTcbGet - get the pointer to the signal tcb** Get the pointer to the signal tcb.  If there is no signal tcb, try and* allocate it.**/static struct sigtcb *sigTcbGet (void)    {    WIND_TCB *pTcb = taskIdCurrent;    struct sigtcb *pSigTcb;    int ix;    if (INT_RESTRICT () != OK)	return (NULL);			/* errno was set */    if (pTcb->pSignalInfo != NULL)	return (pTcb->pSignalInfo);    pSigTcb = (struct sigtcb *) taskStackAllot((int) taskIdCurrent,					       sizeof (struct sigtcb));    if (pSigTcb == NULL)	{	errnoSet (ENOMEM);	return (NULL);	}    pTcb->pSignalInfo = pSigTcb;    bzero ((void *) pSigTcb, sizeof (struct sigtcb));    for (ix = 0; ix <= _NSIGS; ix++)	pSigTcb->sigt_qhead[ix].sigq_next = pSigTcb->sigt_qhead[ix].sigq_prev =		&pSigTcb->sigt_qhead[ix];    return (pSigTcb);    }/********************************************************************************* sigPendRun - get a signal from the set of pending signals and run it** NOTE: YOU MUST BE IN THE KERNEL.*/static int sigPendRun    (    struct sigtcb	*pSigTcb    )    {    sigset_t set = ~pSigTcb->sigt_blocked;    struct sigcontext sigCtx;    int signo;    if ((signo = sigPendGet (pSigTcb, &set, &sigCtx.sc_info)) > 0)	{	sigCtx.sc_onstack      = 0;	sigCtx.sc_restart      = 0;	sigCtx.sc_mask         = pSigTcb->sigt_blocked;	pSigTcb->sigt_blocked |= (pSigTcb->sigt_vec[signo].sa_mask |				  sigmask(signo));#if CPU_FAMILY == MC680X0	sigCtx.sc_fformat      = 0;#endif	windExit ();				/* KERNEL EXIT */	if (_sigCtxSave (&sigCtx.sc_regs) == 0)	    {	    _sigCtxRtnValSet (&sigCtx.sc_regs, 1);	    sigWrapper (&sigCtx);	    }	return (TRUE);	}    return (FALSE);    }/********************************************************************************* sigPendGet - get a signal from the set of pending signals** NOTE: YOU MUST BE IN THE KERNEL.*/static int sigPendGet    (    struct sigtcb	*pSigTcb,    const sigset_t	*sigset,    struct siginfo 	*info    )    {    long		sig;    long		mask;    struct sigpend	*pSigpend;    mask = *sigset & pSigTcb->sigt_pending;    if (mask == 0)	return (OK);    mask &= -mask;			/* find lowest bit set */    sig = ffsMsb (mask);    if (mask & pSigTcb->sigt_kilsigs)	{	pSigTcb->sigt_kilsigs		&= ~mask;	info->si_signo			= sig;	info->si_code			= SI_KILL;	info->si_value.sival_int	= 0;	}    else	{	pSigpend = structbase(struct sigpend, sigp_q,			      pSigTcb->sigt_qhead[sig].sigq_next);	pSigpend->sigp_q.sigq_prev->sigq_next = pSigpend->sigp_q.sigq_next;	pSigpend->sigp_q.sigq_next->sigq_prev = pSigpend->sigp_q.sigq_prev;	pSigpend->sigp_q.sigq_next = NULL;	pSigpend->sigp_q.sigq_prev = NULL;	*info = pSigpend->sigp_info;	pSigpend->sigp_overruns = pSigpend->sigp_active_overruns;	pSigpend->sigp_active_overruns = 0;	/*	 * free queued signal buffer	 */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影在线网| 91丨国产丨九色丨pron| 亚洲免费观看在线视频| 日韩三级视频中文字幕| av亚洲产国偷v产偷v自拍| 日本不卡视频一二三区| 亚洲精品国产第一综合99久久 | 精品国偷自产国产一区| 一本久久综合亚洲鲁鲁五月天| 天堂蜜桃91精品| 亚洲猫色日本管| 国产日韩欧美精品电影三级在线| 欧美裸体bbwbbwbbw| 色视频一区二区| 丁香婷婷综合色啪| 精品中文字幕一区二区| 天天影视色香欲综合网老头| 一区二区三区在线视频免费观看 | 日本一不卡视频| 一区二区在线观看免费视频播放 | 日韩av在线播放中文字幕| 亚洲精品免费播放| 国产精品久久一卡二卡| 国产午夜精品美女毛片视频| 日韩久久免费av| 欧美一区二区三区系列电影| 欧美日韩国产高清一区| 欧美丝袜丝nylons| 色av成人天堂桃色av| 成人免费视频网站在线观看| 国产精品一区二区男女羞羞无遮挡| 日本人妖一区二区| 青青草国产成人av片免费| 亚洲高清在线精品| 亚洲电影你懂得| 亚洲一区二区视频在线观看| 一区二区三区四区五区视频在线观看| 中文字幕一区二区三区蜜月| 国产精品午夜免费| 中文字幕在线一区| 国产精品美日韩| 中文字幕一区二区三区精华液| 国产欧美日韩三级| 国产精品亲子伦对白| 亚洲欧洲国产日韩| 亚洲美女少妇撒尿| 午夜欧美大尺度福利影院在线看| 亚洲一区二区偷拍精品| 日韩国产精品久久久| 九色综合国产一区二区三区| 激情图区综合网| 国产69精品久久99不卡| 成人av在线网| 欧美亚洲一区二区在线| 91精品一区二区三区久久久久久| 91精品国产福利| 久久毛片高清国产| 国产精品久久久久久久久果冻传媒 | 国产在线播放一区三区四| 久草精品在线观看| 成人av午夜电影| 欧洲生活片亚洲生活在线观看| 欧美精品视频www在线观看| 日韩视频在线永久播放| 久久久久久久久久久电影| 国产精品看片你懂得| 亚洲午夜久久久久久久久久久| 秋霞成人午夜伦在线观看| 风间由美一区二区三区在线观看 | 国产日韩成人精品| 亚洲天堂网中文字| 日韩va亚洲va欧美va久久| 国产乱子轮精品视频| 97久久精品人人做人人爽| 欧美卡1卡2卡| 国产婷婷精品av在线| 亚洲午夜一区二区三区| 狠狠色丁香婷婷综合| 91色porny| 欧美成人综合网站| 国产精品国产三级国产有无不卡| 亚洲国产aⅴ天堂久久| 国产精选一区二区三区| 在线这里只有精品| ww亚洲ww在线观看国产| 一区二区三区电影在线播| 九色综合狠狠综合久久| 在线观看av一区| 久久精品欧美日韩精品 | 亚洲国产日韩av| 国产一区二区三区在线观看免费 | 国产剧情av麻豆香蕉精品| 日本精品视频一区二区| 久久精品在这里| 五月婷婷久久综合| 成人免费视频播放| 欧美大片顶级少妇| 一区二区三区日韩欧美| 国产成人日日夜夜| 欧美一个色资源| 一区二区三区精品久久久| 国产**成人网毛片九色| 88在线观看91蜜桃国自产| 亚洲免费视频中文字幕| 国产乱码精品一品二品| 欧美疯狂做受xxxx富婆| 亚洲色欲色欲www在线观看| 国内成人免费视频| 欧美精品电影在线播放| 亚洲另类春色国产| 懂色av一区二区三区免费看| 欧美一级二级在线观看| 亚洲国产精品天堂| 91啪在线观看| **欧美大码日韩| 成人免费高清视频| 国产日韩综合av| 国产一区二区美女诱惑| 日韩午夜三级在线| 婷婷丁香激情综合| 欧美性猛片xxxx免费看久爱| 亚洲视频一二三| 成人久久久精品乱码一区二区三区| 精品卡一卡二卡三卡四在线| 天天色图综合网| 欧美午夜精品电影| 亚洲国产视频网站| 欧美性生交片4| 亚洲成av人片一区二区| 欧美性极品少妇| 亚洲综合精品自拍| 欧洲一区二区三区在线| 亚洲一区国产视频| 在线日韩一区二区| 午夜精品成人在线视频| 欧美男人的天堂一二区| 日韩极品在线观看| 欧美一区二区三区日韩| 久热成人在线视频| 精品国产免费一区二区三区香蕉| 美女诱惑一区二区| 久久青草欧美一区二区三区| 国产一区二区h| 中文字幕精品一区| 91视频观看免费| 亚洲午夜羞羞片| 欧美一级高清片| 国产精品一区二区久久不卡 | 国产精品丝袜一区| 懂色av一区二区在线播放| 自拍视频在线观看一区二区| 色琪琪一区二区三区亚洲区| 亚洲第一狼人社区| 欧美v亚洲v综合ⅴ国产v| 国产麻豆视频精品| 欧美激情一二三区| 91国偷自产一区二区三区观看| 午夜久久久久久久久久一区二区| 日韩美女一区二区三区| 成人免费视频网站在线观看| 亚洲综合在线观看视频| 91精品国产综合久久香蕉的特点| 九九九久久久精品| 国产精品视频一二| 在线看日本不卡| 久久精品久久99精品久久| 久久久久久久久久久黄色| 99精品桃花视频在线观看| 亚洲国产毛片aaaaa无费看| 日韩欧美区一区二| 成人一区二区三区在线观看| 亚洲精品v日韩精品| 日韩精品一区二区三区中文精品| 成人高清在线视频| 午夜婷婷国产麻豆精品| 国产亚洲福利社区一区| 欧美性色综合网| 盗摄精品av一区二区三区| 亚洲亚洲精品在线观看| 国产午夜精品久久久久久免费视| 色婷婷精品大视频在线蜜桃视频 | 黄色日韩网站视频| 亚洲人精品一区| 精品国产一区a| 欧美午夜精品久久久久久超碰| 国产精品一区免费视频| 亚洲国产精品一区二区www| 国产三级一区二区三区| 欧美精品一二三| 91美女精品福利| 国内精品伊人久久久久av影院| 亚洲大片免费看| 成人欧美一区二区三区白人| 日韩久久免费av| 欧美视频精品在线观看| 成人av网站免费| 韩国av一区二区三区四区| 亚洲成av人片一区二区梦乃 | 日本人妖一区二区| 亚洲精品菠萝久久久久久久|