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

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

?? ptydrv.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ptyDrv.c - pseudo-terminal driver *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01z,12oct01,brk  added SELECT functionality to Master (SPR #65498) 01y,19oct01,dcb  Fix the routine title line to match the coding conventions.01x,14feb01,spm  merged from version 01x of tor2_0_x branch (base 01w):                 added removal of pty device (SPR #28675)01w,12mar99,p_m  Fixed SPR 9124 by mentioning that there is no way to delete a                 pty device.01v,03feb93,jdi  documentation cleanup for 5.1.01u,13nov92,dnw  added include of semLibP.h01t,21oct92,jdi  removed mangen SECTION designation.01s,18jul92,smb  Changed errno.h to errnoLib.h.01r,04jul92,jcf  scalable/ANSI/cleanup effort.01q,26may92,rrr  the tree shuffle01p,19nov91,rrr  shut up some ansi warnings.01o,04oct91,rrr  passed through the ansification filter                  -changed functions to ansi style		  -changed includes to have absolute path from h/		  -changed VOID to void		  -changed copyright notice01n,05apr91,jdi	 documentation -- removed header parens and x-ref numbers;		 doc review by rdc.01m,27feb91,jaa	 documentation update.01l,26jun90,jcf  changed semaphore type for 5.0.  Embedded semaphore.01k,23mar90,dab  removed ptyMasterDelete() and ptySlaveDelete().01j,15feb90,dab  added ptyMasterDelete() and ptySlaveDelete(). documentation.01i,30may88,dnw  changed to v4 names.01h,04may88,jcf  changed semaphores to be consistent with new semLib.01g,06nov87,ecs  documentation.01f,24oct87,gae  added pty{Master,Slave}Close() so that reads on		   corresponding would return 0/ERROR.01e,20oct87,gae  made ptyDrv() return correct status on succesive calls.		 documentation.01d,25mar87,jlf  documentation01c,21dec86,dnw  changed to not get include files from default directories.01b,02jul86,jlf  documentation01a,01apr86,rdc  wrotten.*//*The pseudo-terminal driver provides a tty-like interface between a master andslave process, typically in network applications.  The master processsimulates the "hardware" side of the driver (e.g., a USART serial chip), whilethe slave process is the application program that normally talks to the driver.USER-CALLABLE ROUTINESMost of the routines in this driver are accessible only through the I/Osystem.  However, the following routines must be called directly: ptyDrv() toinitialize the driver, ptyDevCreate() to create devices, and ptyDevRemove()to remove an existing device.INITIALIZING THE DRIVERBefore using the driver, it must be initialized by calling ptyDrv().This routine must be called before any reads, writes, or calls toptyDevCreate().CREATING PSEUDO-TERMINAL DEVICESBefore a pseudo-terminal can be used, it must be created by callingptyDevCreate():.CS    STATUS ptyDevCreate	(	char  *name,	  /@ name of pseudo terminal      @/	int   rdBufSize,  /@ size of terminal read buffer @/	int   wrtBufSize  /@ size of write buffer         @/	).CEFor instance, to create the device pair "/pty/0.M" and "/pty/0.S",with read and write buffer sizes of 512 bytes, the proper call would be:.CS   ptyDevCreate ("/pty/0.", 512, 512);.CEWhen ptyDevCreate() is called, two devices are created, a master andslave.  One is called <name>M and the other <name>S.  They canthen be opened by the master and slave processes.  Data written to themaster device can then be read on the slave device, and vice versa.  Callsto ioctl() may be made to either device, but they should only apply to theslave side, since the master and slave are the same device.The ptyDevRemove() routine will delete an existing pseudo-terminal deviceand reclaim the associated memory. Any file descriptors associated withthe device will be closed.IOCTL FUNCTIONSPseudo-terminal drivers respond to the same ioctl() functions used bytty devices.  These functions are defined in ioLib.h and documented inthe manual entry for tyLib.INCLUDE FILES: ioLib.h, ptyDrv.hSEE ALSO: tyLib,.pG "I/O System"*/#include "vxWorks.h"#include "ioLib.h"#include "iosLib.h"#include "semLib.h"#include "stdlib.h"#include "wdLib.h"#include "selectLib.h"#include "tyLib.h"#include "ptyDrv.h"#include "string.h"#include "errnoLib.h"#include "private/semLibP.h"#include "private/funcBindP.h" IMPORT STATUS tyDevRemove(TY_DEV_ID pTyDev);#define PTY_WRITE_THRESHOLD		20	/* local variables */LOCAL int ptySlaveDrvNum;	/* driver number assigned to slave driver */LOCAL int ptyMasterDrvNum;	/* driver number assigned to master drv */LOCAL int ptyWrtThreshold  = PTY_WRITE_THRESHOLD; /* min bytes free in output buffer *//* forward static functions */static int ptyMasterOpen (PSEUDO_DEV *pPseudoDev, char *name, int mode); static int ptySlaveOpen (PSEUDO_DEV *pPseudoDev, char *name, int mode);static STATUS ptySlaveClose (PSEUDO_DEV *pPseudoDev);static STATUS ptyMasterClose (PSEUDO_DEV *pPseudoDev);static int ptySlaveRead (PSEUDO_DEV *pPseudoDev, char *buffer, int maxbytes);static int ptyMasterRead (PSEUDO_DEV *pPseudoDev, char *buffer, int		maxbytes);static int ptySlaveWrite (PSEUDO_DEV *pPseudoDev, char *buffer, int nbytes);static int ptyMasterWrite (PSEUDO_DEV *pPseudoDev, char *buffer, int nbytes);static STATUS ptySlaveIoctl (PSEUDO_DEV *pPseudoDev, int request, int arg);static STATUS ptyMasterIoctl (PSEUDO_DEV *pPseudoDev, int request, int arg);static void ptyMasterStartup (PSEUDO_DEV *pPseudoDev);/********************************************************************************* ptyDrv - initialize the pseudo-terminal driver** This routine initializes the pseudo-terminal driver.* It must be called before any other routine in this module.** RETURNS: OK, or ERROR if the master or slave devices cannot be installed.*/STATUS ptyDrv (void)    {    static BOOL done;	/* FALSE = not done, TRUE = done */    static STATUS status;    if (!done)	{	done = TRUE;	ptySlaveDrvNum = iosDrvInstall (ptySlaveOpen, (FUNCPTR) NULL,					ptySlaveOpen, ptySlaveClose,					ptySlaveRead, ptySlaveWrite,					ptySlaveIoctl);	ptyMasterDrvNum = iosDrvInstall (ptyMasterOpen, (FUNCPTR) NULL,					ptyMasterOpen, ptyMasterClose,					ptyMasterRead, ptyMasterWrite,					ptyMasterIoctl);	status = (ptySlaveDrvNum != ERROR && ptyMasterDrvNum != ERROR) ? OK								       : ERROR;	}    return (status);    }/********************************************************************************* ptyDevCreate - create a pseudo terminal** This routine creates a master and slave device which can then be opened by* the master and slave processes.  The master process simulates the "hardware"* side of the driver, while the slave process is the application program that* normally talks to a tty driver.   Data written to the master device can then* be read on the slave device, and vice versa.** RETURNS: OK, or ERROR if memory is insufficient.*/STATUS ptyDevCreate    (    char *name,         /* name of pseudo terminal */    int rdBufSize,      /* size of terminal read buffer */    int wrtBufSize      /* size of write buffer */    )    {    STATUS status;    char nameBuf [MAX_FILENAME_LENGTH];    PSEUDO_DEV *pPseudoDev;    if (ptySlaveDrvNum < 1 || ptyMasterDrvNum < 1)	{	errnoSet (S_ioLib_NO_DRIVER);	return (ERROR);	}    pPseudoDev = (PSEUDO_DEV *) malloc (sizeof (PSEUDO_DEV));    if (pPseudoDev == NULL)	return (ERROR);    /* initialize device descriptor */    if (tyDevInit ((TY_DEV_ID) pPseudoDev, rdBufSize, wrtBufSize,		   (FUNCPTR)ptyMasterStartup) != OK)	{	free ((char *)pPseudoDev);	return (ERROR);	}    /* initialize the select stuff for the master pty fd */    if (_func_selWakeupListInit != NULL)        (* _func_selWakeupListInit) (&pPseudoDev->masterSelWakeupList);    semBInit (&pPseudoDev->masterReadSyncSem, SEM_Q_PRIORITY, SEM_EMPTY);    /* add Slave and Master devices */    strcpy (nameBuf, name);    strcat (nameBuf, "S");    status = iosDevAdd (&pPseudoDev->slaveDev, nameBuf, ptySlaveDrvNum);    if (status == OK)	{	strcpy (nameBuf, name);	strcat (nameBuf, "M");	status = iosDevAdd ((DEV_HDR *) pPseudoDev, nameBuf, ptyMasterDrvNum);	}    return (status);    }/******************************************************************************** ptyDevRemove - destroy a pseudo terminal** This routine removes an existing master and slave device and releases all* allocated memory. It will close any open files using either device.** RETURNS: OK, or ERROR if terminal not found** INTERNAL* This routine reverses the ptyDevCreate() routine operations.*/STATUS ptyDevRemove    (    char * 	pName         /* name of pseudo terminal to remove */    )    {    char * 	pTail = NULL; 	/* Pointer to tail of device name. */    DEV_HDR * 	pMasterDev;    DEV_HDR * 	pSlaveDev;    char nameBuf [MAX_FILENAME_LENGTH];    PSEUDO_DEV *pPseudoDev;    if (ptySlaveDrvNum < 1 || ptyMasterDrvNum < 1)        {        errnoSet (S_ioLib_NO_DRIVER);        return (ERROR);        }    strcpy (nameBuf, pName);    strcat (nameBuf, "M");    pMasterDev = iosDevFind (nameBuf, &pTail);    if (pMasterDev == NULL || pTail == nameBuf)     /* Device not found? */        return (ERROR);    strcpy (nameBuf, pName);    strcat (nameBuf, "S");    pSlaveDev = iosDevFind (nameBuf, &pTail);    if (pSlaveDev == NULL || pTail == nameBuf)      /* Device not found? */        return (ERROR);    /* Close any open files and remove the master and slave devices. */    iosDevDelete (pSlaveDev);    iosDevDelete (pMasterDev);    /*     * The master device header is also the header for the ty device and     * a pointer to the overall pseudo device structure. Remove those     * data structures.     */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久国产精品| 5858s免费视频成人| 欧美日韩在线三区| 久久精品欧美一区二区三区不卡 | 69堂国产成人免费视频| 国产精品卡一卡二| 精品一区二区在线观看| 91福利视频久久久久| 久久婷婷久久一区二区三区| 性做久久久久久免费观看欧美| 国产成人综合网站| 欧美成人伊人久久综合网| 亚洲一二三四在线| 99久久精品久久久久久清纯| 亚洲精品一区二区三区四区高清| 亚洲18色成人| 欧美羞羞免费网站| 亚洲视频一区在线| 丁香一区二区三区| 国产午夜精品一区二区三区四区| 青青草伊人久久| 欧美在线观看18| 艳妇臀荡乳欲伦亚洲一区| 99精品视频一区二区| 国产精品视频你懂的| 国产精品一二三四| 国产日韩欧美精品一区| 久久福利视频一区二区| 欧美不卡在线视频| 毛片av一区二区| 久久伊人中文字幕| 国产一区二区久久| 久久亚洲综合色一区二区三区| 看电视剧不卡顿的网站| 精品国产乱码久久久久久浪潮| 男女性色大片免费观看一区二区 | 色香蕉成人二区免费| 亚洲免费大片在线观看| 在线精品观看国产| 亚洲一卡二卡三卡四卡| 在线不卡免费欧美| 蜜臀av国产精品久久久久 | 一本色道久久综合精品竹菊| 亚洲视频免费看| 欧美在线视频全部完| 五月激情丁香一区二区三区| 欧美成人a在线| 国产成人综合亚洲91猫咪| 中文字幕在线不卡视频| 91久久精品一区二区二区| 亚洲成人在线网站| 日韩视频永久免费| 国产福利一区二区| 亚洲激情图片qvod| 日韩一区二区免费在线电影| 国产一区二区美女诱惑| 国产精品的网站| 欧美日韩精品免费观看视频| 免费观看成人鲁鲁鲁鲁鲁视频| 精品久久久久久无| 成人动漫中文字幕| 亚洲国产成人va在线观看天堂| 欧美久久久久免费| 国产福利一区在线| 亚州成人在线电影| 国产亚洲欧美激情| 欧洲精品视频在线观看| 久久国产人妖系列| 亚洲欧洲国产日本综合| 在线播放亚洲一区| 高清在线观看日韩| 天堂精品中文字幕在线| 国产日韩欧美精品综合| 欧美精品xxxxbbbb| 成人精品视频一区二区三区| 偷窥少妇高潮呻吟av久久免费| 久久久91精品国产一区二区精品| 欧美影视一区在线| 国产成人午夜电影网| 亚洲成人激情自拍| 国产精品高潮呻吟久久| 日韩一区二区免费电影| 色哟哟亚洲精品| 国产精品一卡二卡| 麻豆精品一区二区综合av| 亚洲蜜桃精久久久久久久| 久久精品人人做| 日韩视频在线你懂得| 精品视频资源站| 色偷偷久久人人79超碰人人澡| 久久精品国产精品青草| 亚洲香肠在线观看| 亚洲欧洲国产专区| 日本一区二区三区电影| www精品美女久久久tv| 欧美精品三级日韩久久| 91片在线免费观看| 成人免费视频视频| 国产**成人网毛片九色| 精品亚洲国内自在自线福利| 丝袜亚洲精品中文字幕一区| 亚洲欧美一区二区三区久本道91| 国产免费观看久久| 久久久久久久综合色一本| 日韩欧美一区二区不卡| 欧美高清精品3d| 欧美视频第二页| 91在线观看高清| 91麻豆免费观看| 99国产欧美另类久久久精品| 国产精品一区三区| 美女脱光内衣内裤视频久久网站| 午夜日韩在线电影| 婷婷开心久久网| 日韩av不卡一区二区| 日韩高清中文字幕一区| 午夜精品福利视频网站| 亚洲成人自拍一区| 午夜av一区二区三区| 亚洲bt欧美bt精品| 日本不卡视频在线| 麻豆精品久久久| 国产精品一品视频| 成人精品视频一区二区三区| 94色蜜桃网一区二区三区| 99精品视频一区| 欧美午夜精品久久久久久超碰| 91福利在线导航| 337p亚洲精品色噜噜噜| 日韩精品中午字幕| 中文字幕免费观看一区| **性色生活片久久毛片| 亚洲国产日韩a在线播放性色| 日韩和欧美一区二区| 久久精品国产久精国产| 粉嫩av一区二区三区粉嫩| 成人三级伦理片| 欧美在线观看视频在线| 欧美一区二区三区视频在线观看 | 97精品久久久久中文字幕| 97久久精品人人做人人爽| 欧美亚洲国产一区二区三区| 91麻豆精品国产91久久久久久久久 | 欧美一区二区在线免费播放| 日韩精品一区二区三区视频在线观看 | 国产精品成人网| 亚洲成人在线免费| 国产乱码精品一区二区三区av| 99精品国产一区二区三区不卡| 欧美丝袜丝交足nylons图片| 精品欧美乱码久久久久久1区2区 | 亚洲图片有声小说| 国产精品一区二区久激情瑜伽| 成人av手机在线观看| 欧美午夜宅男影院| 久久嫩草精品久久久久| 亚洲欧美二区三区| 老鸭窝一区二区久久精品| 97se亚洲国产综合自在线| 欧美日本国产视频| 国产精品伦理在线| 麻豆精品国产91久久久久久| 91视频观看视频| 久久综合国产精品| 亚洲综合一区二区精品导航| 国产精品1区2区3区在线观看| 欧美亚洲综合网| 中文久久乱码一区二区| 秋霞午夜av一区二区三区| 99精品视频一区| 久久久亚洲综合| 轻轻草成人在线| 欧美日韩亚洲综合一区二区三区| 国产拍欧美日韩视频二区| 日本欧美一区二区三区| 色综合激情久久| 久久久久久一二三区| 日本色综合中文字幕| 欧美午夜电影网| 亚洲人精品午夜| 成人一区在线看| 久久色成人在线| 日本不卡视频一二三区| 欧美日韩国产经典色站一区二区三区 | 天堂资源在线中文精品| 99精品国产热久久91蜜凸| 国产欧美一区二区精品婷婷| 老司机午夜精品99久久| 欧美视频在线观看一区二区| 亚洲日本va午夜在线电影| 国产精品白丝av| 精品99一区二区| 久久精品二区亚洲w码| 91.com视频| 亚洲成av人片在线观看| 欧美偷拍一区二区| 亚洲成人精品在线观看| 欧美性生活久久| 亚洲国产毛片aaaaa无费看 | 99re亚洲国产精品|