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

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

?? mx1.c

?? unix v7是最后一個廣泛發布的研究型UNIX版本
?? C
字號:
#include "../h/param.h"#include "../h/systm.h"#include "../h/dir.h"#include "../h/user.h"#include "../h/reg.h"#include "../h/proc.h"#include "../h/tty.h"#include "../h/inode.h"#define	KERNEL	1#include "../h/mx.h"#include "../h/file.h"#include "../h/conf.h"/* * Multiplexor:   clist version * * installation: *	requires a line in cdevsw - *		mxopen, mxclose, mxread, mxwrite, mxioctl, 0, * *	also requires a line in linesw - *		mxopen, mxclose, mcread, mcwrite, mxioctl, nulldev, nulldev, * *	The linesw entry for mpx should be the last one in the table. *	'nldisp' (number of line disciplines) should not include the *	mpx line.  This is to prevent mpx from being enabled by an ioctl. *	mxtty.c must be loaded instead of tty.c so that certain *	sleeps will not be done if a typewriter is connected to *	a channel and so that sdata will be called from ttyinput. *	 */struct	chan	chans[NCHANS];struct	schan	schans[NPORTS];struct	group	*groups[NGROUPS];int	mpxline;struct chan *xcp();dev_t	mpxdev	= -1;char	mcdebugs[NDEBUGS];/* * Allocate a channel, set c_index to index. */struct	chan *challoc(index, isport){register s;	s = spl6();	if (isport) {		register struct schan *cp, *lastcp;		cp = schans;		lastcp = &schans[NPORTS];		for (; cp < lastcp; cp++)			if (cp->c_group==NULL) {				cp->c_index = index;				cp->c_pgrp = 0;				cp->c_flags = 0;				splx(s);				return((struct chan *)cp);			}		goto out;	} else {		register struct chan *cp, *lastcp;		cp = chans;		lastcp = &chans[NCHANS];		for(; cp < lastcp; cp++) 			if(cp->c_group==NULL) {				cp->c_index = index;				cp->c_pgrp = 0;				cp->c_flags = 0;				splx(s);				return(cp);			}	}out:	splx(s);	return(NULL);}/* * Allocate a group table cell. */gpalloc(){register i,s;	s = spl6();	for(i = NGROUPS-1; i>=0; i--)		if (groups[i]==NULL) {			groups[i]++;			break;		}	splx(s);	return(i);}/* * Add a channel to the group in * inode ip. */struct chan *addch(ip, isport)struct inode *ip;{register struct chan *cp;register struct group *gp;register i;	plock(ip);	gp = &ip->i_un.i_group;	for(i=0;i<NINDEX;i++) {		cp = (struct chan *)gp->g_chans[i];		if (cp == NULL) {			if ((cp=challoc(i, isport)) != NULL) {				gp->g_chans[i] = cp;				cp->c_group = gp;			}			break;		}		cp = NULL;	}	prele(ip);	return(cp);}/* * mpxchan system call */mpxchan(){struct	inode *ip, *gip;register int i;extern	mxopen(), mcread();extern	sdata(), scontrol();dev_t	dev;struct	tty *tp;struct	file *fp, *chfp, *gfp;struct	chan *cp;struct	group *gp, *ngp;struct	a {	int	cmd;	int	*argvec;} *uap;struct mx_args vec;	/*	 * common setup code.	 */	uap = (struct a *)u.u_ap;	copyin((caddr_t)uap->argvec, (caddr_t)&vec, sizeof vec);	gp = NULL;	switch(uap->cmd) {	case NPGRP:		if (vec.m_arg[1] < 0)			goto sw;	case CHAN:	case JOIN:	case EXTR:	case ATTACH:	case DETACH:	case CSIG:		gfp = getf(vec.m_arg[1]);		if (gfp==NULL)			goto bad;		gip = gfp->f_inode;		gp = &gip->i_un.i_group;		if (gp->g_inode != gip)			goto bad;	}sw:	switch(uap->cmd) {	/*	 * creat an mpx file.	 */	case MPX:	case MPXN:		if (mpxdev < 0) {			for(i=0; linesw[i].l_open; i++) 				if (linesw[i].l_read == mcread) {					mpxline = i;					goto found1;				}			goto bad;		found1:			for(i=0; cdevsw[i].d_open; i++) {				if (cdevsw[i].d_open == mxopen)					goto found2;			}		bad:			u.u_error = ENXIO;			return;		found2:			mpxdev = (dev_t)(i<<8);		}		if (uap->cmd==MPXN) {			if ((ip=ialloc(rootdev))==NULL)				goto bad;			ip->i_mode = 0666+IFCHR;			goto merge;		}		u.u_dirp = vec.m_name;		ip = namei(uchar,1);		if (ip != NULL) {			u.u_error = EEXIST;			iput(ip);			return;		}		if (u.u_error)			return;		ip = maknode((vec.m_arg[0]&0777)+IFCHR);		if (ip == NULL)			return;	merge:		if ((i = gpalloc()) < 0) {			iput(ip);			goto bad;		}		ip->i_un.i_rdev = (daddr_t)(mpxdev+i);		gp = &ip->i_un.i_group;		groups[i] = gp;		gp->g_inode = ip;		gp->g_state = COPEN;		gp->g_group = NULL;		gp->g_index = 0;		gp->g_rotmask = 1;		gp->g_rot = 0;		gp->g_datq = 0;		open1(ip,FREAD+FWRITE,2);		if (u.u_error) {			groups[i] = NULL;			iput(ip);			goto bad;		}		ip->i_mode = (ip->i_mode & ~IFMT) | IFMPC;		ip->i_count++;		ip->i_flag |= IACC|IUPD|ICHG;		fp = u.u_ofile[u.u_r.r_val1];		fp->f_flag |= FMP;		fp->f_un.f_chan = NULL;		gp->g_file = fp;		for(i=0;i<NINDEX;)			gp->g_chans[i++] = NULL;		return;	/*	 * join file descriptor (arg 0) to group (arg 1)	 * return channel number	 */	case JOIN:		if ((fp=getf(vec.m_arg[0]))==NULL)			goto bad;		ip = fp->f_inode;		i = ip->i_mode & IFMT;		if (i == IFMPC) {			if ((fp->f_flag&FMP) != FMP) {				goto bad;			}			ngp = &ip->i_un.i_group;			mlink (ngp, gp);			fp->f_count++;			return;		}		if (i != IFCHR) 			goto bad;		dev = (dev_t)ip->i_un.i_rdev;		tp = cdevsw[major(dev)].d_ttys;		if (tp==NULL)			goto bad;		tp = &tp[minor(dev)];		if (tp->t_chan)			goto bad;		if ((cp=addch(gip, 1))==NULL)			goto bad;		tp->t_chan = cp;		cp->c_fy = fp;		fp->f_count++;		cp->c_ttyp = tp;		cp->c_line = tp->t_line;		cp->c_flags = XGRP+PORT;		u.u_r.r_val1 = cpx(cp);		return;	/*	 * attach channel (arg 0) to group (arg 1)	 */	case ATTACH:		cp = xcp(gp, vec.m_arg[0]);		if (cp==NULL)			goto bad;		u.u_r.r_val1 = cpx(cp);		wakeup((caddr_t)cp);		return;	case DETACH:		cp = xcp(gp, vec.m_arg[0]);		if (cp==NULL)			goto bad;		detach(cp);		return;	/*	 * extract channel (arg 0) from group (arg 1).	 */	case EXTR:		cp = xcp(gp, vec.m_arg[0]);		if (cp==NULL) {			goto bad;		}		if (cp->c_flags & ISGRP) {			mxfalloc(((struct group *)cp)->g_file);			return;		}		if ((fp = cp->c_fy) != NULL) {			mxfalloc(fp);			return;		}		if ((fp = falloc()) == NULL) {			return;		}		fp->f_inode = gip;		gip->i_count++;		fp->f_un.f_chan = cp;		fp->f_flag = (vec.m_arg[2]) ?				(FREAD|FWRITE|FMPY) : (FREAD|FWRITE|FMPX);		cp->c_fy = fp;		return;	/*	 * make new chan on group (arg 1)	 */	case CHAN:		if ((cp=addch(gip, 0))==NULL)			goto bad;		cp->c_flags = XGRP;		cp->c_fy = NULL;		cp->c_ttyp = cp->c_ottyp = (struct tty *)cp;		cp->c_line = cp->c_oline = mpxline;		u.u_r.r_val1 = cpx(cp);		return;	/*	 * connect fd (arg 0) to channel fd (arg 1)	 * (arg 2 <  0) => fd to chan only	 * (arg 2 >  0) => chan to fd only	 * (arg 2 == 0) => both directions	 */	case CONNECT:		if ((fp=getf(vec.m_arg[0]))==NULL)			goto bad;		if ((chfp=getf(vec.m_arg[1]))==NULL)			goto bad;		ip = fp->f_inode;		i = ip->i_mode&IFMT;		if (i!=IFCHR)			goto bad;		dev = (dev_t)ip->i_un.i_rdev;		tp = cdevsw[major(dev)].d_ttys;		if (tp==NULL)			goto bad;		tp = &tp[minor(dev)];		if (!(chfp->f_flag&FMPY)) {			goto bad;		}		cp = chfp->f_un.f_chan;		if (cp==NULL || cp->c_flags&PORT) {			goto bad;		}		i = vec.m_arg[2];		if (i>=0) {			cp->c_ottyp = tp;			cp->c_oline = tp->t_line;		}		if (i<=0)  {			tp->t_chan = cp;			cp->c_ttyp = tp;			cp->c_line = tp->t_line;		}		return;	case NPGRP: {		register struct proc *pp;		if (gp != NULL) {			cp = xcp(gp, vec.m_arg[0]);			if (cp==NULL)				goto bad;		}		pp = u.u_procp;		pp->p_pgrp = pp->p_pid;		if (vec.m_arg[2])			pp->p_pgrp = vec.m_arg[2];		if (gp != NULL)			cp->c_pgrp = pp->p_pgrp;		return;	}	case CSIG:		cp = xcp(gp, vec.m_arg[0]);		if (cp==NULL)			goto bad;		signal(cp->c_pgrp, vec.m_arg[2]);		return;	case DEBUG:		i = vec.m_arg[0];		if (i<0 || i>NDEBUGS)			return;		mcdebugs[i] = vec.m_arg[1];		if (i==ALL)			for(i=0;i<NDEBUGS;i++)				mcdebugs[i] = vec.m_arg[1];		return;	default:		goto bad;	}}detach(cp)register struct chan *cp;{	register struct group *gp;	register int i;	if (cp->c_flags&ISGRP) {		gp = (struct group *)cp;		closef(gp->g_file);		i = ((struct group *)cp)->g_index;		gp->g_chans[i] = NULL;		return;	} else if (cp->c_flags&PORT && cp->c_ttyp != NULL) {		closef(cp->c_fy);		chdrain(cp);		chfree(cp);		return;	}	if (cp->c_fy && (cp->c_flags&WCLOSE)==0) {		cp->c_flags |= WCLOSE;		chwake(cp);	} else {		chdrain(cp);		chfree(cp);	}}mxfalloc(fp)register struct file *fp;{register i;	if (fp==NULL) {		u.u_error = ENXIO;		return;	}	i = ufalloc();	if (i < 0)		return;	u.u_ofile[i] = fp;	fp->f_count++;	u.u_r.r_val1 = i;	return;}mlink(sub,master)struct group *sub, *master;{register i;	for(i=0;i<NINDEX;i++) {		if (master->g_chans[i] != NULL)			continue;		master->g_chans[i] = (struct chan *)sub;		sub->g_group = master;		sub->g_index = i;		u.u_r.r_val1 = i;		return;	}	u.u_error = ENXIO;	return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91天堂素人约啪| 欧美大尺度电影在线| 五月婷婷久久综合| 中文字幕一区av| 中文字幕免费不卡| 久久人人超碰精品| 欧美成人r级一区二区三区| 欧美日韩国产经典色站一区二区三区| 95精品视频在线| 99精品国产视频| 久久久久9999亚洲精品| 日本麻豆一区二区三区视频| 午夜电影网一区| 色综合久久88色综合天天6| 91免费看`日韩一区二区| 久久午夜老司机| 亚洲欧洲国产日本综合| 国产毛片精品视频| 成人综合婷婷国产精品久久蜜臀| 国产肉丝袜一区二区| 欧美一区二区三区免费在线看| 欧美精品三级日韩久久| 日韩欧美综合一区| 中文字幕av一区二区三区高 | 欧美色精品在线视频| 欧美亚洲另类激情小说| 欧美一区二区三区影视| 亚洲国产精品一区二区久久恐怖片| 亚洲成人动漫在线观看| 国产在线麻豆精品观看| 91免费视频大全| 亚洲欧美日韩国产综合| 三级精品在线观看| 国产高清成人在线| 欧美日韩精品三区| 亚洲精品福利视频网站| 国内精品伊人久久久久av一坑| 日韩小视频在线观看专区| 日本sm残虐另类| 色乱码一区二区三区88| 911精品产国品一二三产区| 国产成人精品免费一区二区| 日韩三级视频在线观看| 久久激情五月激情| 日本韩国精品在线| 夜夜嗨av一区二区三区四季av| 久久99热99| 国产视频一区在线观看| 人人超碰91尤物精品国产| 欧美成人女星排名| 国产成人av影院| 亚洲免费观看视频| 欧美日本韩国一区| 国内外成人在线| 国产精品久久久久国产精品日日| 欧美a级一区二区| 日韩一区二区三区高清免费看看 | 中文字幕免费不卡| 91小视频免费看| 日韩电影在线一区| 久久久久久久久久美女| 色先锋久久av资源部| 日韩av在线播放中文字幕| 欧美一区二区三区婷婷月色| 国产成人精品三级| 亚洲成人777| 久久久99精品免费观看| 欧美日韩国产成人在线免费| 91精品国产一区二区三区蜜臀| 九色综合狠狠综合久久| 欧美性做爰猛烈叫床潮| 久久成人羞羞网站| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 精品制服美女丁香| 中文字幕佐山爱一区二区免费| 日韩一区二区免费电影| 不卡视频一二三四| 亚洲欧洲av另类| 精品福利一二区| 国内一区二区在线| 一区二区三区在线视频播放| 久久久精品国产99久久精品芒果| 91国产视频在线观看| 国产一区二区免费看| 亚洲成av人片观看| 亚洲人成人一区二区在线观看| 日韩欧美中文字幕制服| 欧美午夜视频网站| www.爱久久.com| 一个色妞综合视频在线观看| 51久久夜色精品国产麻豆| 亚洲婷婷综合色高清在线| 精品视频在线视频| gogogo免费视频观看亚洲一| 精品写真视频在线观看| 婷婷久久综合九色综合绿巨人 | 欧美精品久久一区二区三区| 风间由美一区二区三区在线观看| 欧美精品丝袜中出| 一本色道亚洲精品aⅴ| 国产一区二区在线看| 免费在线看成人av| 日韩精品久久理论片| 亚洲一区二区欧美激情| 欧美a一区二区| 成人av电影在线| 成人免费视频一区| 激情文学综合网| 麻豆精品蜜桃视频网站| 欧美成人伊人久久综合网| 欧美三级三级三级| 欧美亚洲精品一区| 欧美日韩免费视频| 欧美日韩一区三区| 欧美日韩在线亚洲一区蜜芽| 欧美日韩精品欧美日韩精品一| 欧洲另类一二三四区| 麻豆精品国产传媒mv男同| 天天操天天干天天综合网| 一区二区三区不卡在线观看| 一区二区三区精品久久久| 一区二区三区在线视频观看58| 一区二区三区欧美日韩| 亚洲最新在线观看| 日韩精品一卡二卡三卡四卡无卡| 日韩黄色免费电影| 国产一区亚洲一区| 成人夜色视频网站在线观看| av欧美精品.com| 在线观看免费亚洲| 日韩一级免费观看| 国产午夜一区二区三区| 国产精品国产三级国产aⅴ入口| 综合婷婷亚洲小说| 爽爽淫人综合网网站| 国产资源在线一区| 97精品超碰一区二区三区| 欧美中文字幕久久| 成人av片在线观看| 欧美一区二区三区不卡| 制服.丝袜.亚洲.另类.中文| 9191成人精品久久| 国产亚洲女人久久久久毛片| 最新久久zyz资源站| 一区二区三区中文在线| 美女视频第一区二区三区免费观看网站| 精品制服美女久久| 色综合久久久久综合| 91精品国产福利| 欧美高清在线精品一区| 一区2区3区在线看| 亚洲女厕所小便bbb| 亚洲高清视频的网址| 精品亚洲成a人| 91小视频在线观看| 国产亚洲综合在线| 婷婷久久综合九色综合伊人色| 国产成人精品综合在线观看 | 国产福利一区二区| 欧美天天综合网| 久久亚洲春色中文字幕久久久| 亚洲欧美色一区| 国产一区二区三区美女| 欧美调教femdomvk| 国产精品天干天干在线综合| 欧美日韩国产高清一区二区 | 欧美三级一区二区| 久久夜色精品国产噜噜av | 欧美少妇性性性| 国产精品嫩草影院com| 国产91富婆露脸刺激对白| 亚洲人成在线观看一区二区| 视频精品一区二区| 99视频在线精品| 久久久影院官网| 日日欢夜夜爽一区| 97se亚洲国产综合在线| 欧美经典一区二区三区| 日韩精品欧美精品| 色噜噜狠狠色综合欧洲selulu| 精品国产免费人成电影在线观看四季 | 日韩国产一二三区| 99久久久精品| 亚洲国产精品av| 国产一区 二区 三区一级| 欧美一级午夜免费电影| 婷婷综合五月天| 欧美天天综合网| 亚洲成人免费看| 亚洲最大成人综合| 国内不卡的二区三区中文字幕 | av一本久道久久综合久久鬼色| 欧美精品一区二区三区四区 | 亚洲国产一区视频| 色综合久久中文字幕| 亚洲天堂成人网| 在线精品国精品国产尤物884a| 亚洲人成7777| 色先锋久久av资源部| 久久福利视频一区二区|