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

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

?? aiosysdrv.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	    }	if (aioSysBlockingDev (fd) && aioSysOpWillBlock (fd, op))	    {	    /* If the device is a blocking device and the requested	     * operation will block, then move it from the work queue to 	     * to the wait queue, and notify the aioWaitTask of new waiter.	     */	    semGive (&aioIOSem);    	    IOQ_LOCK (&pDev->ioQ);	    IOQ_WORK_DELETE (&pDev->ioQ, &pReq->ioNode);	    IOQ_WAIT_ADD (&pDev->ioQ, &pReq->ioNode, pReq->ioNode.prio);	    pReq->state = AIO_WAIT;			/* wait state */    	    IOQ_UNLOCK (&pDev->ioQ);	    waitMsg.op = IO_OP (op);	    waitMsg.fd = fd;	    write (aioSysFd, (char *) &waitMsg, sizeof (WAIT_MSG));	    continue;	    }	/* Perform the requested I/O */ 	switch (op)	    {	    case IO_READ:	    	retVal = aioSysRead (pReq->pAiocb, &errorVal); 		break;	    case IO_WRITE:            	retVal = aioSysWrite (pReq->pAiocb, &errorVal);		break;		    default:	    	retVal   = ERROR;	    	errorVal = EINVAL;		break;	    }	semGive (&aioIOSem);	/* Mark request as completed and send the request back to aioLib */    	IOQ_LOCK (&pDev->ioQ);	AIO_DONE_SET (pReq->pAiocb, retVal, errorVal);        IOQ_WORK_DELETE (&pDev->ioQ, &pReq->ioNode);	IOQ_UNLOCK (&pDev->ioQ);	ioQNodeDone (&pReq->ioNode);        }    }/******************************************************************************* aioSysSyncReq - synchronize an AIO request ** This routine attempts to synchronize the AIO request <pReq> to the * synchronized I/O completion state.* * RETURNS: OK if successful, ERROR otherwise.*/LOCAL STATUS aioSysSyncReq    (    AIO_DEV *		pDev,			/* AIO device */    AIO_SYS *		pReq			/* AIO request */    )    {    int			errorVal;		/* error value */    IO_Q *		pQ = &pDev->ioQ;	/* I/O queue */    STATUS 		retVal = OK;		/* return value */    if ((pReq->state == AIO_QUEUED) && (pReq->ioNode.op == IO_WRITE))	{	if (aioSysWrite (pReq->pAiocb, &errorVal) == ERROR)	    retVal = ERROR;			/* write failed */   	/* complete the AIO operation */        AIO_DONE_SET (pReq->pAiocb, retVal, errorVal);        IOQ_LOCK (pQ);	IOQ_WORK_DELETE (pQ, &pReq->ioNode);    	IOQ_UNLOCK (pQ);	ioQNodeDone (&pReq->ioNode);	}    return (retVal);    }/******************************************************************************* aioSysWrite - AIO system driver write routine ** This routine performs a write call for the AIO request <pAiocb>.** RETURNS: return value for the write call. ** INTERNAL* POSIX says that writes can append to the file if O_APPEND is set* for the file.  When we implement O_APPEND, the following code will * need to be changed.*/    LOCAL STATUS aioSysWrite    (    struct aiocb *	pAiocb,			/* AIO control block */    int *		pError    )    {    int			retVal = ERROR;		/* return value */    /* lseek protected by aioIOSem */    lseek (pAiocb->aio_fildes, pAiocb->aio_offset, SEEK_SET);     retVal = write (pAiocb->aio_fildes, (char *) pAiocb->aio_buf, 		    pAiocb->aio_nbytes);     if (aioSysPrintRtn != NULL)	(* aioSysPrintRtn) 	    ("aioSysWrite:fd (%d) wrote %d bytes buffer 0x%x loc %d \n", 	     pAiocb->aio_fildes, retVal, pAiocb->aio_buf, pAiocb->aio_offset);    *pError = (retVal == ERROR) ? errno : 0;    return (retVal);     }/******************************************************************************* aioSysRead - AIO system driver read routine** This routine performs a read call for the AIO request <pAiocb>.** RETURNS:  return value from the read call. */LOCAL STATUS aioSysRead     (    struct aiocb *	pAiocb,			/* AIO control block */    int *		pError    )    {    int			retVal = ERROR;		/* return value */    /* lseek protected by aioIOSem */    lseek (pAiocb->aio_fildes, pAiocb->aio_offset, SEEK_SET);     retVal = read (pAiocb->aio_fildes, (char *) pAiocb->aio_buf, 		   pAiocb->aio_nbytes);    if (aioSysPrintRtn != NULL)	(* aioSysPrintRtn) 	    ("aioSysRead:fd (%d) read %d bytes buffer 0x%x loc %d \n", 	     pAiocb->aio_fildes, retVal, pAiocb->aio_buf, pAiocb->aio_offset);    *pError = (retVal == ERROR) ? errno : 0;    return (retVal);     }/********************************************************************************* aioWaitTask - AIO wait task** The AIO wait task is responsible for managing the AIO requests that are* are in AIO_WAIT state.  These are requests that can not be completed * immediately because they are waiting for I/O on blocking devices.  * When data becomes available on a file descriptor, the aioWaitTask finds* the waiting request and moves it back to the work queue to be executed* by the aioIoTask.** RETURNS: N/A* NOMANUAL*/void aioWaitTask (void)    {    int			ndone;				/* num done */    WAIT_MSG 		waitMsg;			/* control message */    IO_Q *		pIoQ = &aioDev.ioQ;		/* I/O queue */    /* clear out the file descriptors - set control fd */    FD_ZERO (&ioFds.ioWait [READ_OP]);    FD_ZERO (&ioFds.ioWait [WRITE_OP]);    FD_SET (aioSysFd, &ioFds.ioWait [READ_OP]);    FOREVER 	{	ioFds.io [READ_OP] = ioFds.ioWait [READ_OP];	ioFds.io [WRITE_OP] = ioFds.ioWait [WRITE_OP];	/* Wait for data and/or control messages */	ndone = select (FD_SETSIZE, &ioFds.io [READ_OP], &ioFds.io [WRITE_OP], 			NULL, NULL);  	if (FD_ISSET (aioSysFd, &ioFds.io [READ_OP]))	    {	    	    /* Got a control message with new fd to wait on */	    read (aioSysFd, (caddr_t) &waitMsg, sizeof (WAIT_MSG));	    if (aioSysPrintRtn != NULL)		(* aioSysPrintRtn) ("aioWaitTask: control op %s fd %d\n",  			            (waitMsg.op == READ_OP) ? "read" : "write",				    waitMsg.fd);	    	    /* mask in the new fd to wait on */	    FD_SET (waitMsg.fd, &ioFds.ioWait [waitMsg.op]);		    	    if (--ndone == 0)		continue;			/* only got control info */	    }	/* Data became available.  Find the request(s) this will satisfy */    	IOQ_LOCK (pIoQ);	FD_ZERO (&ioFds.ioWait [READ_OP]);	FD_ZERO (&ioFds.ioWait [WRITE_OP]);        ioQEach (&pIoQ->waitQ, aioSysWaitFind, (int) pIoQ, 0);	IOQ_UNLOCK (pIoQ);        FD_SET (aioSysFd, &ioFds.ioWait [READ_OP]);	/* add control fd */	}    }/******************************************************************************* aioSysBlockingDev - check if a device is a blocking device** This routine determines if the device associated with file descriptor* <fd> is a blocking (select) device.** RETURNS: TRUE if the device supports select, FALSE otherwise.* NOMANUAL*/BOOL aioSysBlockingDev    (    int 		fd 			/* file descriptor */    )    {    fd_set		readFds;		/* read fds */    BOOL		selectDev;		/* device supports select */    int			flags;			/* driver flags */    struct timeval	timeOut = {0, 0};	/* timeout */    if (aioDrvFlagsGet (fd, &flags) == ERROR)	return (FALSE);    /* check flags if we already know this information */    if (flags & DRV_NOSELECT)	return (FALSE);					/* no select */    if (flags & DRV_SELECT)	return (TRUE);					/* has select */    /* Poll driver to see if select fails */    FD_ZERO (&readFds);    FD_SET (fd, &readFds);    selectDev = select (FD_SETSIZE, &readFds, NULL, NULL, &timeOut) == ERROR ?		FALSE : TRUE;    aioDrvFlagsSet (fd, selectDev ? DRV_SELECT : DRV_NOSELECT);    return (selectDev);    }/********************************************************************************* aioSysOpWillBlock - requested operation will block** This routine determines if the the operation specified by <op> will block* on the device associated with file descriptor <fd>.** RETURNS: TRUE if the operation will block, FALSE otherwise.*/LOCAL BOOL aioSysOpWillBlock     (    int			fd,			/* file descriptor */    int			op			/* operation */    )    {    fd_set		readFds;		/* read fds */    fd_set		writeFds;		/* write fds */    struct timeval	timeOut = {0, 0};	/* timeout */        /* Poll the device to see if the requested operation will block */    FD_ZERO (&readFds);     FD_ZERO (&writeFds);    FD_SET (fd, (op == IO_READ) ? &readFds : &writeFds);    return ((select (FD_SETSIZE, &readFds, &writeFds, NULL, &timeOut) == 0) ? 	    TRUE : FALSE);    }/********************************************************************************* aioSysWaitFind - find waiting requests (each routine)** This routine gets called once for each AIO request in the wait queue.* It looks at the AIO request <pReq> to determine if the waiting request may * have been satisfied by the recent wake up.  It also reconstructs the * file descriptors for the aioWaitTask to select on.*  * RETURNS: TRUE*/LOCAL BOOL aioSysWaitFind    (    AIO_SYS *		pReq,			/* AIO request */    IO_Q *		pQ,			/* I/O queue */    int			bogus			/* not used */    )    {    int			op;			/* operation */    int			fd; 			/* file descriptor */    op = IO_OP (pReq->ioNode.op);    fd = pReq->pAiocb->aio_fildes;    if (FD_ISSET (fd, &ioFds.io [op]))	{	/* Request may have been satisfied, move it from the 	 * wait queue to the work queue and notify the I/O tasks 	 * of new work. 	 */	IOQ_WAIT_DELETE (pQ, &pReq->ioNode);    	IOQ_WORK_ADD (pQ, &pReq->ioNode, pReq->ioNode.prio);    	pReq->pAiocb->aio_sys.state = AIO_QUEUED;	FD_CLR (fd, &ioFds.io [op]);        semGive (&aioSysWorkSem);			/* notify i/o task */	}    else    	FD_SET (fd, &ioFds.ioWait [op]);    return (TRUE);					/* do entire list */    }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美吞精做爰啪啪高潮| 99热在这里有精品免费| 精品久久99ma| 国产成人亚洲综合色影视| 奇米色777欧美一区二区| 日韩高清在线观看| 日韩高清欧美激情| 不卡视频一二三四| 91色porny| 亚洲一区二区三区在线播放| 亚洲一区二区中文在线| 男人的天堂久久精品| 色婷婷久久99综合精品jk白丝| 成人av集中营| 欧美一区二区三区爱爱| 欧美精品一区二区三区蜜桃| 亚洲乱码国产乱码精品精的特点| 国产精品久久99| 亚洲日本欧美天堂| 偷窥少妇高潮呻吟av久久免费| 亚洲国产一区二区视频| 麻豆成人免费电影| 国产精品一区不卡| 色久优优欧美色久优优| 欧美一级生活片| 一区二区三区不卡视频 | 国产一区二区美女诱惑| 成人一区在线观看| 成人黄色小视频在线观看| 亚洲婷婷在线视频| 日韩女优毛片在线| 国产女主播视频一区二区| 国产99久久久国产精品潘金网站| 91.com在线观看| 欧美熟乱第一页| 国产精品色哟哟| 亚洲一区视频在线| 93久久精品日日躁夜夜躁欧美| 欧洲激情一区二区| 国产亚洲欧美日韩在线一区| 中文字幕佐山爱一区二区免费| 精品一区二区三区免费| 一本到一区二区三区| 国产精品传媒入口麻豆| thepron国产精品| 亚洲欧美视频在线观看视频| 亚洲黄色录像片| 日韩视频一区二区在线观看| 亚洲欧美日韩系列| 在线看国产日韩| 天天亚洲美女在线视频| 日韩欧美精品在线视频| 国产精品1024久久| 亚洲精品国产一区二区精华液| 欧洲另类一二三四区| 亚欧色一区w666天堂| 97精品国产97久久久久久久久久久久| 亚洲国产精品精华液2区45| 日本成人在线网站| 久久精品一区四区| 99精品欧美一区二区三区小说 | 精品久久久久久久久久久久久久久久久 | 91精品免费在线| 久久99精品久久久久久| 欧美国产欧美综合| 91蝌蚪porny| 蜜臂av日日欢夜夜爽一区| 国产人伦精品一区二区| 91女神在线视频| 美国十次综合导航| 中文字幕视频一区二区三区久| 久久av中文字幕片| 国产欧美精品一区二区色综合 | 一区二区三区日韩在线观看| 亚洲少妇中出一区| 欧美三日本三级三级在线播放| 日韩一区国产二区欧美三区| 国产精品综合一区二区三区| 亚洲免费观看视频| www激情久久| 免费日韩伦理电影| 亚洲蜜臀av乱码久久精品| 欧美电影免费观看完整版| 91小视频在线免费看| 久久 天天综合| 夜夜爽夜夜爽精品视频| 日本一区二区视频在线观看| 欧美日韩国产在线观看| 日韩av一区二区在线影视| 欧美国产精品劲爆| 日韩视频免费直播| 91麻豆成人久久精品二区三区| 另类中文字幕网| 亚洲v精品v日韩v欧美v专区| 国产精品美女久久久久av爽李琼| 日韩亚洲欧美成人一区| 欧美伊人久久久久久久久影院| 国产一区二区毛片| 久久机这里只有精品| 亚洲精品欧美综合四区| 国产精品久久久久久久久动漫 | 欧美人动与zoxxxx乱| 99国产精品久久久久久久久久久| 国内不卡的二区三区中文字幕 | 99久久综合国产精品| 韩日欧美一区二区三区| 丝袜亚洲精品中文字幕一区| 欧美mv日韩mv国产网站| 欧美日韩国产影片| 欧洲在线/亚洲| 一本一本久久a久久精品综合麻豆| 粉嫩aⅴ一区二区三区四区五区| 精品一区二区免费在线观看| 蜜臀久久99精品久久久画质超高清| 亚洲国产一区二区a毛片| 亚洲日本韩国一区| 一区二区三区欧美在线观看| 亚洲欧美日韩人成在线播放| 亚洲免费伊人电影| 亚洲一区在线看| 亚洲国产美国国产综合一区二区| 久久av资源站| 亚洲靠逼com| 一级日本不卡的影视| 欧美色图片你懂的| 国产成人aaa| 精品亚洲成a人在线观看| 日韩精品三区四区| 婷婷综合五月天| 久久久精品中文字幕麻豆发布| 精品蜜桃在线看| 中文字幕免费一区| 91福利国产精品| 欧美性受极品xxxx喷水| 欧美日韩不卡视频| 欧美成人一区二区三区在线观看 | 国产精品久久久久aaaa樱花| 亚洲另类在线制服丝袜| 日韩国产在线观看| 久久99精品久久久久| 成人午夜电影久久影院| 色哟哟日韩精品| 欧美一区二区观看视频| 久久久久亚洲综合| 亚洲女子a中天字幕| 日韩黄色免费网站| 国产精品一区二区久久精品爱涩| av在线综合网| 91麻豆精品国产| 日韩 欧美一区二区三区| 久久99精品久久久久久久久久久久| 成人在线视频一区二区| 欧洲一区二区三区免费视频| 日韩欧美的一区| ●精品国产综合乱码久久久久| 日本中文在线一区| av电影在线观看不卡| 欧美肥妇free| 99免费精品在线观看| 欧美美女喷水视频| 中文字幕欧美激情一区| 日韩精彩视频在线观看| 东方aⅴ免费观看久久av| 欧美三级韩国三级日本一级| 久久精品欧美日韩| 午夜精品国产更新| aa级大片欧美| 精品国产91洋老外米糕| 亚洲一区二区欧美| 成人动漫一区二区三区| 欧美一区二区国产| 一区二区日韩电影| 成人免费视频国产在线观看| 欧美精品1区2区3区| 国产精品每日更新在线播放网址| 日韩中文字幕亚洲一区二区va在线 | 在线播放视频一区| 国产精品国产三级国产专播品爱网| 免费成人在线播放| 在线精品视频免费播放| 中文字幕乱码久久午夜不卡| 蜜桃精品在线观看| 欧美精品久久99久久在免费线| 亚洲欧洲国产日韩| 成人午夜看片网址| 亚洲精品在线三区| 日本欧美一区二区三区乱码| 在线观看日韩高清av| 亚洲欧美日韩中文字幕一区二区三区| 激情综合网最新| 欧美成人精品福利| 日本免费在线视频不卡一不卡二| 在线观看精品一区| 尤物视频一区二区| 色国产精品一区在线观看| 亚洲免费成人av| 91在线免费播放| 中文字幕一区二区三区在线观看| 丁香婷婷深情五月亚洲| 国产精品福利一区|