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

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

?? tty_ioctl.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  linux/kernel/drivers/char/tty_ioctl.c * *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds * * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines * which can be dynamically activated and de-activated by the line * discipline handling modules (like SLIP). */#include <linux/types.h>#include <linux/termios.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/config.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/tty.h>#include <linux/fcntl.h>#include <linux/string.h>#include <asm/io.h>#include <asm/bitops.h>#include <asm/segment.h>#include <asm/system.h>#undef	DEBUG#ifdef DEBUG# define	PRINTK(x)	printk (x)#else# define	PRINTK(x)	/**/#endifextern int session_of_pgrp(int pgrp);extern int do_screendump(int arg);extern int kill_pg(int pgrp, int sig, int priv);#ifdef CONFIG_SELECTIONextern int set_selection(const int arg);extern int paste_selection(struct tty_struct *tty);#endif /* CONFIG_SELECTION */static int tty_set_ldisc(struct tty_struct *tty, int ldisc);void flush_input(struct tty_struct * tty){	cli();	tty->read_q.head = tty->read_q.tail = 0;	tty->secondary.head = tty->secondary.tail = 0;	tty->canon_head = tty->canon_data = tty->erasing = 0;	memset(&tty->readq_flags, 0, sizeof tty->readq_flags);	memset(&tty->secondary_flags, 0, sizeof tty->secondary_flags);	sti();	if (!tty->link)		return;	/* No cli() since ptys don't use interrupts. */	tty->link->write_q.head = tty->link->write_q.tail = 0;	wake_up_interruptible(&tty->link->write_q.proc_list);	if (tty->link->packet) {		tty->ctrl_status |= TIOCPKT_FLUSHREAD;		wake_up_interruptible(&tty->link->secondary.proc_list);	}}void flush_output(struct tty_struct * tty){	cli();	tty->write_q.head = tty->write_q.tail = 0;	sti();	wake_up_interruptible(&tty->write_q.proc_list);	if (!tty->link)		return;	/* No cli() since ptys don't use interrupts. */	tty->link->read_q.head = tty->link->read_q.tail = 0;	tty->link->secondary.head = tty->link->secondary.tail = 0;	tty->link->canon_head = tty->link->canon_data = tty->link->erasing = 0;	memset(&tty->link->readq_flags, 0, sizeof tty->readq_flags);	memset(&tty->link->secondary_flags, 0, sizeof tty->secondary_flags);	if (tty->link->packet) {		tty->ctrl_status |= TIOCPKT_FLUSHWRITE;		wake_up_interruptible(&tty->link->secondary.proc_list);	}}void wait_until_sent(struct tty_struct * tty, int timeout){	struct wait_queue wait = { current, NULL };	TTY_WRITE_FLUSH(tty);	if (EMPTY(&tty->write_q))		return;	add_wait_queue(&tty->write_q.proc_list, &wait);	current->counter = 0;	/* make us low-priority */	if (timeout)		current->timeout = timeout + jiffies;	else		current->timeout = (unsigned) -1;	do {		current->state = TASK_INTERRUPTIBLE;		if (current->signal & ~current->blocked)			break;		TTY_WRITE_FLUSH(tty);		if (EMPTY(&tty->write_q))			break;		schedule();	} while (current->timeout);	current->state = TASK_RUNNING;	remove_wait_queue(&tty->write_q.proc_list, &wait);}static int do_get_ps_info(int arg){	struct tstruct {		int flag;		int present[NR_TASKS];		struct task_struct tasks[NR_TASKS];	};	struct tstruct *ts = (struct tstruct *)arg;	struct task_struct **p;	char *c, *d;	int i, n = 0;		i = verify_area(VERIFY_WRITE, (void *)arg, sizeof(struct tstruct));	if (i)		return i;	for (p = &FIRST_TASK ; p <= &LAST_TASK ; p++, n++)		if (*p)		{			c = (char *)(*p);			d = (char *)(ts->tasks+n);			for (i=0 ; i<sizeof(struct task_struct) ; i++)				put_fs_byte(*c++, d++);			put_fs_long(1, (unsigned long *)(ts->present+n));		}		else				put_fs_long(0, (unsigned long *)(ts->present+n));	return(0);			}static void unset_locked_termios(struct termios *termios,				 struct termios *old,				 struct termios *locked){	int	i;	#define NOSET_MASK(x,y,z) (x = ((x) & ~(z)) | ((y) & (z)))	if (!locked) {		printk("Warning?!? termios_locked is NULL.\n");		return;	}	NOSET_MASK(termios->c_iflag, old->c_iflag, locked->c_iflag);	NOSET_MASK(termios->c_oflag, old->c_oflag, locked->c_oflag);	NOSET_MASK(termios->c_cflag, old->c_cflag, locked->c_cflag);	NOSET_MASK(termios->c_lflag, old->c_lflag, locked->c_lflag);	termios->c_line = locked->c_line ? old->c_line : termios->c_line;	for (i=0; i < NCCS; i++)		termios->c_cc[i] = locked->c_cc[i] ?			old->c_cc[i] : termios->c_cc[i];}int check_change(struct tty_struct * tty, int channel){	/* If we try to set the state of terminal and we're not in the	   foreground, send a SIGTTOU.  If the signal is blocked or	   ignored, go ahead and perform the operation.  POSIX 7.2) */	if (current->tty != channel)		return 0;	if (tty->pgrp <= 0) {		printk("check_change: tty->pgrp <= 0!\n");		return 0;	}	if (current->pgrp == tty->pgrp)		return 0;	if (is_ignored(SIGTTOU))		return 0;	if (is_orphaned_pgrp(current->pgrp))		return -EIO;	(void) kill_pg(current->pgrp,SIGTTOU,1);	return -ERESTARTSYS;}static int set_termios_2(struct tty_struct * tty, struct termios * termios){	struct termios old_termios = *tty->termios;	int canon_change;	canon_change = (old_termios.c_lflag ^ termios->c_lflag) & ICANON;	cli();	*tty->termios = *termios;	if (canon_change) {		memset(&tty->secondary_flags, 0, sizeof tty->secondary_flags);		tty->canon_head = tty->secondary.tail;		tty->canon_data = 0;		tty->erasing = 0;	}	sti();	if (canon_change && !L_ICANON(tty) && !EMPTY(&tty->secondary))		/* Get characters left over from canonical mode. */		wake_up_interruptible(&tty->secondary.proc_list);	/* see if packet mode change of state */	if (tty->link && tty->link->packet) {		int old_flow = ((old_termios.c_iflag & IXON) &&				(old_termios.c_cc[VSTOP] == '\023') &&				(old_termios.c_cc[VSTART] == '\021'));		int new_flow = (I_IXON(tty) &&				STOP_CHAR(tty) == '\023' &&				START_CHAR(tty) == '\021');		if (old_flow != new_flow) {			tty->ctrl_status &= ~(TIOCPKT_DOSTOP | TIOCPKT_NOSTOP);			if (new_flow)				tty->ctrl_status |= TIOCPKT_DOSTOP;			else				tty->ctrl_status |= TIOCPKT_NOSTOP;			wake_up_interruptible(&tty->link->secondary.proc_list);		}	}	unset_locked_termios(tty->termios, &old_termios,			     termios_locked[tty->line]);	if (tty->set_termios)		(*tty->set_termios)(tty, &old_termios);	return 0;}static int set_termios(struct tty_struct * tty, struct termios * termios,		       int channel){	struct termios tmp_termios;	memcpy_fromfs(&tmp_termios, termios, sizeof (struct termios));	return set_termios_2(tty, &tmp_termios);}static int get_termio(struct tty_struct * tty, struct termio * termio){	int i;	struct termio tmp_termio;	i = verify_area(VERIFY_WRITE, termio, sizeof (struct termio));	if (i)		return i;	tmp_termio.c_iflag = tty->termios->c_iflag;	tmp_termio.c_oflag = tty->termios->c_oflag;	tmp_termio.c_cflag = tty->termios->c_cflag;	tmp_termio.c_lflag = tty->termios->c_lflag;	tmp_termio.c_line = tty->termios->c_line;	for(i=0 ; i < NCC ; i++)		tmp_termio.c_cc[i] = tty->termios->c_cc[i];	memcpy_tofs(termio, &tmp_termio, sizeof (struct termio));	return 0;}static int set_termio(struct tty_struct * tty, struct termio * termio,		      int channel){	struct termio tmp_termio;	struct termios tmp_termios;	tmp_termios = *tty->termios;	memcpy_fromfs(&tmp_termio, termio, sizeof (struct termio));#define SET_LOW_BITS(x,y)	((x) = (0xffff0000 & (x)) | (y))	SET_LOW_BITS(tmp_termios.c_iflag, tmp_termio.c_iflag);	SET_LOW_BITS(tmp_termios.c_oflag, tmp_termio.c_oflag);	SET_LOW_BITS(tmp_termios.c_cflag, tmp_termio.c_cflag);	SET_LOW_BITS(tmp_termios.c_lflag, tmp_termio.c_lflag);	memcpy(&tmp_termios.c_cc, &tmp_termio.c_cc, NCC);#undef SET_LOW_BITS	return set_termios_2(tty, &tmp_termios);}static int set_window_size(struct tty_struct * tty, struct winsize * ws){	struct winsize tmp_ws;	memcpy_fromfs(&tmp_ws, ws, sizeof (struct winsize));	if (memcmp(&tmp_ws, &tty->winsize, sizeof (struct winsize)) &&	    tty->pgrp > 0)		kill_pg(tty->pgrp, SIGWINCH, 1);	tty->winsize = tmp_ws;	return 0;}/* Set the discipline of a tty line. */static int tty_set_ldisc(struct tty_struct *tty, int ldisc){	if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS) ||	    !(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED))		return -EINVAL;	if (tty->disc == ldisc)		return 0;	/* We are already in the desired discipline */	/* Shutdown the current discipline. */	wait_until_sent(tty, 0);	flush_input(tty);	if (ldiscs[tty->disc].close)		ldiscs[tty->disc].close(tty);	/* Now set up the new line discipline. */	tty->disc = ldisc;	tty->termios->c_line = ldisc;	if (ldiscs[tty->disc].open)		return(ldiscs[tty->disc].open(tty));	else		return 0;}static unsigned long inq_canon(struct tty_struct * tty){	int nr, head, tail;	if (!tty->canon_data)		return 0;	head = tty->canon_head;	tail = tty->secondary.tail;	nr = (head - tail) & (TTY_BUF_SIZE-1);	/* Skip EOF-chars.. */	while (head != tail) {		if (test_bit(tail, &tty->secondary_flags) &&		    tty->secondary.buf[tail] == __DISABLED_CHAR)			nr--;		INC(tail);	}	return nr;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品三级av在线| 亚洲一区二区欧美| 亚洲国产精品影院| 国产尤物一区二区在线| 欧美亚一区二区| 国产精品电影一区二区| 国产中文字幕精品| 欧美一二区视频| 亚洲成人av电影| 99精品久久久久久| 亚洲国产精品激情在线观看| 美女视频黄久久| 在线电影欧美成精品| 亚洲视频综合在线| 99免费精品视频| 国产精品美女久久久久高潮| 国产精品自拍网站| 欧美tk丨vk视频| 久草这里只有精品视频| 欧美一二三在线| 日本不卡不码高清免费观看| 欧美日韩在线电影| 亚洲成人tv网| 欧美另类变人与禽xxxxx| 亚洲第一主播视频| 欧美日韩一区视频| 午夜国产精品一区| 欧美色图第一页| 国产精品久久久久久一区二区三区| 黄色资源网久久资源365| 精品国产1区二区| 国产精品18久久久久久久久久久久| 欧美一区二区三区免费在线看| 午夜激情综合网| 欧美一区二区三区小说| 免费在线视频一区| 久久天堂av综合合色蜜桃网| 国产成人免费xxxxxxxx| 中文字幕精品三区| 99久久精品免费| 亚洲一卡二卡三卡四卡五卡| 欧美伦理影视网| 日韩影院精彩在线| 精品粉嫩超白一线天av| 国产成人高清视频| 伊人一区二区三区| 在线成人av网站| 国产在线视视频有精品| 国产欧美一区二区精品婷婷| 成人av在线播放网站| 一区二区三区国产精华| 在线91免费看| 激情图片小说一区| 亚洲天堂2016| 欧美精品乱人伦久久久久久| 精品午夜久久福利影院| 亚洲国产成人在线| 欧美无乱码久久久免费午夜一区| 日韩和欧美的一区| 国产精品丝袜黑色高跟| 欧美色图一区二区三区| 激情文学综合网| 一区二区日韩av| 欧美精品一区二区三| 97久久精品人人做人人爽| 午夜精品久久久久久久99樱桃| 精品久久久久久久久久久久久久久久久 | 岛国av在线一区| 亚洲女同ⅹxx女同tv| 日韩欧美二区三区| 色屁屁一区二区| 免费人成在线不卡| 国产精品国产三级国产三级人妇| 欧美精品在线一区二区三区| 成人免费高清在线| 日韩黄色免费电影| 亚洲欧洲综合另类| 精品久久久久久久久久久久久久久 | 日本一区二区成人在线| 欧美日韩亚洲综合在线| 国产精品系列在线播放| 亚洲成年人网站在线观看| 国产欧美日韩在线| 欧美一激情一区二区三区| 色综合中文字幕国产 | 国产精品亚洲午夜一区二区三区| 亚洲一区二区三区中文字幕在线| 久久免费偷拍视频| 91精品国产91久久久久久最新毛片| eeuss影院一区二区三区| 欧美aaaaaa午夜精品| 亚洲永久精品大片| 中文字幕一区免费在线观看| 日韩美女视频在线| 欧美男人的天堂一二区| 成人h动漫精品一区二| 精品视频在线免费观看| 国产一区二区三区av电影| 国产性做久久久久久| 69av一区二区三区| 亚洲丝袜自拍清纯另类| 日韩美女视频一区二区在线观看| 开心九九激情九九欧美日韩精美视频电影| 在线观看亚洲a| 石原莉奈在线亚洲三区| 中文字幕日韩av资源站| 日本一区二区三区dvd视频在线| av一区二区不卡| 国产一区二区三区美女| 亚洲高清久久久| 欧美高清一级片在线观看| 色综合久久天天| 极品少妇一区二区三区精品视频| 亚洲精品亚洲人成人网在线播放| 久久品道一品道久久精品| 九色综合狠狠综合久久| 夜夜精品视频一区二区| 一区二区不卡在线播放| 精品三级av在线| 国产欧美一区二区精品性色超碰| 欧美亚洲自拍偷拍| 国产精品中文字幕日韩精品| 亚洲一区二区黄色| 欧美经典一区二区| 欧美日韩精品欧美日韩精品| 国产乱妇无码大片在线观看| 国产精品入口麻豆九色| 欧美tk—视频vk| 欧美电影在哪看比较好| 国产精品91xxx| 免费成人av在线| 日韩欧美在线网站| 欧美日韩国产综合视频在线观看 | 欧美一区二区福利在线| 国产成人啪午夜精品网站男同| 国产精品18久久久久久vr| 91精彩视频在线| 久久电影网电视剧免费观看| 日韩久久久久久| 三级不卡在线观看| 亚洲一区二区在线播放相泽 | 色综合天天综合网天天看片| 91视频在线观看免费| 欧美午夜不卡视频| 精品国精品自拍自在线| 中文字幕五月欧美| 日本中文字幕不卡| voyeur盗摄精品| 日韩一区二区三区观看| 亚洲国产精品ⅴa在线观看| 亚洲电影一区二区| 精品一区二区免费| 在线免费一区三区| 精品国产91久久久久久久妲己| 亚洲精品视频一区二区| 久久国产精品区| 日本高清成人免费播放| 久久综合久久久久88| 亚洲裸体在线观看| 久久99国产精品免费| 在线观看日产精品| 久久综合资源网| 日韩不卡在线观看日韩不卡视频| 高清不卡一区二区| 日韩无一区二区| 亚洲一区二区欧美| av不卡免费在线观看| 精品国产一区二区精华| 亚洲一二三区在线观看| 99久久婷婷国产综合精品电影| 日韩欧美的一区| 亚洲mv大片欧洲mv大片精品| 成人一道本在线| 精品国产一区二区三区久久久蜜月 | 亚洲成av人在线观看| 成人aaaa免费全部观看| www久久久久| 免费精品99久久国产综合精品| 91亚洲精华国产精华精华液| 国产日韩影视精品| 国内精品免费在线观看| 91精品免费在线| 午夜视频久久久久久| 色婷婷久久99综合精品jk白丝| 国产精品视频线看| 国产成人8x视频一区二区| 精品福利av导航| 国产一区二区电影| 久久欧美中文字幕| 国产一区二区导航在线播放| 精品国产乱码久久久久久闺蜜| 日韩国产一区二| 制服丝袜亚洲播放| 天天影视涩香欲综合网| 欧美女孩性生活视频| 亚洲午夜视频在线观看| 欧美视频在线观看一区二区| 亚洲精品国产精华液| 欧洲一区在线电影| 亚洲大片免费看|