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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? siglib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
* 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	 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体在线国模精品偷拍| 国产精品免费网站在线观看| 亚洲成av人片www| 7777精品伊人久久久大香线蕉完整版 | 91精品一区二区三区久久久久久| 日韩av网站免费在线| 777xxx欧美| 国产suv精品一区二区三区| 国产精品国产三级国产| 欧洲精品视频在线观看| 毛片av一区二区三区| 久久久久久久综合色一本| 波多野结衣在线一区| 一区二区三区四区五区视频在线观看| 欧美色爱综合网| 极品尤物av久久免费看| 日本一区二区三区免费乱视频| 色哟哟国产精品免费观看| 亚洲国产视频直播| 久久丝袜美腿综合| 在线观看91视频| 国产一区二区精品久久91| 亚洲区小说区图片区qvod| 日韩精品一区二区三区视频播放 | 波多野结衣亚洲一区| 亚洲成人av一区二区| 2023国产精品| 欧美三级电影一区| 国产高清精品久久久久| 亚洲综合小说图片| 久久综合九色综合欧美98| 色偷偷久久人人79超碰人人澡| 毛片一区二区三区| 一级日本不卡的影视| 久久噜噜亚洲综合| 欧美日韩成人综合在线一区二区| 国产成人免费视频| 蜜臀国产一区二区三区在线播放 | 亚洲一二三区在线观看| 久久亚洲私人国产精品va媚药| 精品视频在线免费观看| 国产成人一区在线| 裸体健美xxxx欧美裸体表演| 亚洲欧美另类图片小说| 久久久www成人免费无遮挡大片| 欧美视频精品在线观看| av影院午夜一区| 激情综合色播激情啊| 日韩和欧美一区二区| 亚洲三级视频在线观看| 久久精品一区二区| 日韩欧美久久久| 在线不卡的av| 欧洲av在线精品| 一本色道久久综合亚洲aⅴ蜜桃 | 成人av电影免费在线播放| 国产亚洲va综合人人澡精品| 欧美日韩国产系列| 91日韩精品一区| 成人久久久精品乱码一区二区三区| 日本午夜精品一区二区三区电影| 玉足女爽爽91| 一级特黄大欧美久久久| 亚洲色图一区二区三区| 中日韩av电影| 欧美国产日本韩| 国产视频在线观看一区二区三区 | 国产麻豆视频精品| 另类小说综合欧美亚洲| 日日骚欧美日韩| 午夜精品影院在线观看| 午夜精品视频在线观看| 丝袜国产日韩另类美女| 日韩一区精品视频| 日韩精品成人一区二区三区| 一本色道综合亚洲| 久久精品国产久精国产爱| 日韩黄色片在线观看| 日韩中文欧美在线| 久久精品av麻豆的观看方式| 美女mm1313爽爽久久久蜜臀| 国内成人免费视频| 国产一区二区三区av电影| 国产成人在线电影| 99视频一区二区| 精品视频在线免费| 91精品国产色综合久久不卡蜜臀| 91精品在线免费| 久久―日本道色综合久久| 国产日韩在线不卡| 亚洲免费在线电影| 午夜精品一区二区三区免费视频| 欧美aaaaaa午夜精品| 国产精品一区二区x88av| caoporn国产精品| 欧美亚洲日本国产| 日韩视频一区二区| 中文字幕不卡的av| 亚洲综合一区在线| 另类成人小视频在线| 丁香婷婷综合激情五月色| 97se亚洲国产综合自在线观| 国产精品嫩草99a| 国产精品系列在线观看| 国产电影一区在线| 91国偷自产一区二区使用方法| 欧美性色欧美a在线播放| 日韩一区二区麻豆国产| 国产农村妇女精品| 一区二区在线观看视频| 日韩高清一区二区| 成人爽a毛片一区二区免费| 在线观看精品一区| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品日产欧美久久久久| 亚洲第一搞黄网站| 国产精品小仙女| 欧美日本在线一区| 国产欧美日韩综合精品一区二区| 亚洲欧美福利一区二区| 久久99日本精品| 色av一区二区| 久久精品亚洲乱码伦伦中文| 香蕉影视欧美成人| 成人精品视频一区| 日韩午夜精品视频| 艳妇臀荡乳欲伦亚洲一区| 国产一区999| 欧美一区二区三区啪啪| 亚洲久本草在线中文字幕| 狠狠色狠狠色综合| 91精品国产手机| 亚洲已满18点击进入久久| 国产凹凸在线观看一区二区| 欧美一区二区在线观看| 亚洲精品高清在线观看| 懂色av一区二区夜夜嗨| 精品美女一区二区| 亚洲444eee在线观看| 色呦呦一区二区三区| 国产日韩成人精品| 激情小说欧美图片| 91精选在线观看| 亚洲成av人片一区二区梦乃| 99久久99久久久精品齐齐| 久久久美女毛片| 国产在线播放一区二区三区| 日韩一区二区三区电影在线观看| 一区二区三区精品| 91天堂素人约啪| 国产精品色呦呦| 国产成人精品免费网站| 欧美电影精品一区二区| 久久精品免费观看| 日韩写真欧美这视频| 午夜精品久久久久| 9191成人精品久久| 水野朝阳av一区二区三区| 欧美片在线播放| 五月婷婷激情综合| 欧美日韩久久一区二区| 亚洲国产wwwccc36天堂| 欧美性受极品xxxx喷水| 亚洲一区在线电影| 欧美三区免费完整视频在线观看| 一区二区三区在线观看欧美| 91福利国产精品| 午夜电影久久久| 欧美二区三区的天堂| 午夜激情久久久| 欧美精品三级日韩久久| 日韩激情av在线| 精品国产髙清在线看国产毛片| 紧缚捆绑精品一区二区| 久久久久久久久久久久久女国产乱| 精品中文字幕一区二区小辣椒| 日韩欧美在线影院| 韩国三级在线一区| 国产精品伦理一区二区| 91网站最新地址| 亚洲mv在线观看| 欧美xxx久久| 国产超碰在线一区| 亚洲欧洲精品成人久久奇米网| 色婷婷av一区| 天天色综合成人网| 久久久久久久久99精品| a级精品国产片在线观看| 玉米视频成人免费看| 日韩一级黄色大片| 国产精品1区2区| 亚洲精品日日夜夜| 91精品久久久久久久99蜜桃| 国产在线乱码一区二区三区| 国产精品乱子久久久久| 欧美日韩一区久久| 国产一区二区美女| 一区二区欧美国产| 精品国产一区久久| 99亚偷拍自图区亚洲|