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

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

?? tty_ioctl.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
int tty_ioctl(struct inode * inode, struct file * file,	unsigned int cmd, unsigned long arg){	struct tty_struct * tty;	struct tty_struct * other_tty;	struct tty_struct * termios_tty;	pid_t pgrp;	int dev;	int termios_dev;	int retval;	if (MAJOR(file->f_rdev) != TTY_MAJOR) {		printk("tty_ioctl: tty pseudo-major != TTY_MAJOR\n");		return -EINVAL;	}	dev = MINOR(file->f_rdev);	tty = TTY_TABLE(dev);	if (!tty)		return -EINVAL;	if (IS_A_PTY(dev))		other_tty = tty_table[PTY_OTHER(dev)];	else		other_tty = NULL;	if (IS_A_PTY_MASTER(dev)) {		termios_tty = other_tty;		termios_dev = PTY_OTHER(dev);	} else {		termios_tty = tty;		termios_dev = dev;	}	switch (cmd) {		case TCGETS:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (struct termios));			if (retval)				return retval;			memcpy_tofs((struct termios *) arg,				    termios_tty->termios,				    sizeof (struct termios));			return 0;		case TCSETSF:		case TCSETSW:		case TCSETS:			retval = check_change(termios_tty, termios_dev);			if (retval)				return retval;			if (cmd == TCSETSF || cmd == TCSETSW) {				if (cmd == TCSETSF)					flush_input(termios_tty);				wait_until_sent(termios_tty, 0);			}			return set_termios(termios_tty, (struct termios *) arg,					   termios_dev);		case TCGETA:			return get_termio(termios_tty,(struct termio *) arg);		case TCSETAF:		case TCSETAW:		case TCSETA:			retval = check_change(termios_tty, termios_dev);			if (retval)				return retval;			if (cmd == TCSETAF || cmd == TCSETAW) {				if (cmd == TCSETAF)					flush_input(termios_tty);				wait_until_sent(termios_tty, 0);			}			return set_termio(termios_tty, (struct termio *) arg,					  termios_dev);		case TCXONC:			retval = check_change(tty, dev);			if (retval)				return retval;			switch (arg) {			case TCOOFF:				stop_tty(tty);				break;			case TCOON:				start_tty(tty);				break;			case TCIOFF:				if (STOP_CHAR(tty) != __DISABLED_CHAR)					put_tty_queue(STOP_CHAR(tty),						      &tty->write_q);				break;			case TCION:				if (START_CHAR(tty) != __DISABLED_CHAR)					put_tty_queue(START_CHAR(tty),						      &tty->write_q);				break;			default:				return -EINVAL;			}			return 0;		case TCFLSH:			retval = check_change(tty, dev);			if (retval)				return retval;			switch (arg) {			case TCIFLUSH:				flush_input(tty);				break;			case TCIOFLUSH:				flush_input(tty);				/* fall through */			case TCOFLUSH:				flush_output(tty);				break;			default:				return -EINVAL;			}			return 0;		case TIOCEXCL:			set_bit(TTY_EXCLUSIVE, &tty->flags);			return 0;		case TIOCNXCL:			clear_bit(TTY_EXCLUSIVE, &tty->flags);			return 0;		case TIOCSCTTY:			if (current->leader &&			    (current->session == tty->session))				return 0;			/*			 * The process must be a session leader and			 * not have a controlling tty already.			 */			if (!current->leader || (current->tty >= 0))				return -EPERM;			if (tty->session > 0) {				/*				 * This tty is already the controlling				 * tty for another session group!				 */				if ((arg == 1) && suser()) {					/*					 * Steal it away					 */					struct task_struct *p;					for_each_task(p)						if (p->tty == dev)							p->tty = -1;				} else					return -EPERM;			}			current->tty = dev;			tty->session = current->session;			tty->pgrp = current->pgrp;			return 0;		case TIOCGPGRP:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (pid_t));			if (retval)				return retval;			if (current->tty != termios_dev)				return -ENOTTY;			put_fs_long(termios_tty->pgrp, (pid_t *) arg);			return 0;		case TIOCSPGRP:			retval = check_change(termios_tty, termios_dev);			if (retval)				return retval;			if ((current->tty < 0) ||			    (current->tty != termios_dev) ||			    (termios_tty->session != current->session))				return -ENOTTY;			pgrp = get_fs_long((pid_t *) arg);			if (pgrp < 0)				return -EINVAL;			if (session_of_pgrp(pgrp) != current->session)				return -EPERM;			termios_tty->pgrp = pgrp;			return 0;		case TIOCOUTQ:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (unsigned long));			if (retval)				return retval;			put_fs_long(CHARS(&tty->write_q),				    (unsigned long *) arg);			return 0;		case TIOCINQ:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (unsigned long));			if (retval)				return retval;			if (L_ICANON(tty))				put_fs_long(inq_canon(tty),					(unsigned long *) arg);			else				put_fs_long(CHARS(&tty->secondary),					(unsigned long *) arg);			return 0;		case TIOCSTI:			if ((current->tty != dev) && !suser())				return -EPERM;			retval = verify_area(VERIFY_READ, (void *) arg, 1);			if (retval)				return retval;			put_tty_queue(get_fs_byte((char *) arg), &tty->read_q);			TTY_READ_FLUSH(tty);			return 0;		case TIOCGWINSZ:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (struct winsize));			if (retval)				return retval;			memcpy_tofs((struct winsize *) arg, &tty->winsize,				    sizeof (struct winsize));			return 0;		case TIOCSWINSZ:			if (IS_A_PTY_MASTER(dev))				set_window_size(other_tty,(struct winsize *) arg);			return set_window_size(tty,(struct winsize *) arg);		case TIOCLINUX:			switch (get_fs_byte((char *)arg))			{				case 0: 					return do_screendump(arg);				case 1: 					return do_get_ps_info(arg);#ifdef CONFIG_SELECTION				case 2:					return set_selection(arg);				case 3:					return paste_selection(tty);				case 4:					unblank_screen();					return 0;#endif /* CONFIG_SELECTION */				default: 					return -EINVAL;			}		case TIOCCONS:			if (IS_A_CONSOLE(dev)) {				if (!suser())					return -EPERM;				redirect = NULL;				return 0;			}			if (redirect)				return -EBUSY;			if (!suser())				return -EPERM;			if (IS_A_PTY_MASTER(dev))				redirect = other_tty;			else if (IS_A_PTY_SLAVE(dev))				redirect = tty;			else				return -ENOTTY;			return 0;		case FIONBIO:			arg = get_fs_long((unsigned long *) arg);			if (arg)				file->f_flags |= O_NONBLOCK;			else				file->f_flags &= ~O_NONBLOCK;			return 0;		case TIOCNOTTY:			if (current->tty != dev)				return -ENOTTY;			if (current->leader)				disassociate_ctty(0);			current->tty = -1;			return 0;		case TIOCGETD:			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (unsigned long));			if (retval)				return retval;			put_fs_long(tty->disc, (unsigned long *) arg);			return 0;		case TIOCSETD:			retval = check_change(tty, dev);			if (retval)				return retval;			arg = get_fs_long((unsigned long *) arg);			return tty_set_ldisc(tty, arg);		case TIOCGLCKTRMIOS:			arg = get_fs_long((unsigned long *) arg);			retval = verify_area(VERIFY_WRITE, (void *) arg,					     sizeof (struct termios));			if (retval)				return retval;			memcpy_tofs((struct termios *) arg,				    &termios_locked[termios_dev],				    sizeof (struct termios));			return 0;		case TIOCSLCKTRMIOS:			if (!suser())				return -EPERM;			arg = get_fs_long((unsigned long *) arg);			memcpy_fromfs(&termios_locked[termios_dev],				      (struct termios *) arg,				      sizeof (struct termios));			return 0;		case TIOCPKT:			if (!IS_A_PTY_MASTER(dev))				return -ENOTTY;			retval = verify_area(VERIFY_READ, (void *) arg,					     sizeof (unsigned long));			if (retval)				return retval;			if (get_fs_long(arg)) {				if (!tty->packet) {					tty->packet = 1;					tty->link->ctrl_status = 0;				}			} else				tty->packet = 0;			return 0;		case TCSBRK: case TCSBRKP:			retval = check_change(tty, dev);			if (retval)				return retval;			wait_until_sent(tty, 0);			if (!tty->ioctl)				return 0;			tty->ioctl(tty, file, cmd, arg);			return 0;		default:			if (tty->ioctl) {				retval = (tty->ioctl)(tty, file, cmd, arg);				if (retval != -EINVAL)					return retval;			}			if (ldiscs[tty->disc].ioctl) {				retval = (ldiscs[tty->disc].ioctl)					(tty, file, cmd, arg);				return retval;			}			return -EINVAL;	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线一区二区三区| 欧美在线观看视频一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 911精品国产一区二区在线| 国产精品水嫩水嫩| 麻豆国产精品一区二区三区| 日本乱人伦一区| 久久久综合网站| 秋霞成人午夜伦在线观看| 91浏览器打开| 国产精品久久久久久亚洲毛片| 久久精品国内一区二区三区| 欧美午夜精品免费| 日韩毛片在线免费观看| 成人影视亚洲图片在线| 精品国产乱码久久久久久牛牛| 亚洲超碰精品一区二区| 99国产精品国产精品久久| 久久嫩草精品久久久精品一| 蜜臀av性久久久久蜜臀aⅴ| 色噜噜狠狠色综合中国 | 国产在线精品一区在线观看麻豆| 91片在线免费观看| 中文字幕在线免费不卡| 成人app网站| 国产精品福利一区二区| 国产91丝袜在线18| 国产日韩成人精品| 国产米奇在线777精品观看| 欧美大度的电影原声| 蜜桃视频一区二区| 日韩欧美电影一二三| 蜜臀久久99精品久久久久宅男| 欧美日韩你懂得| 天天综合日日夜夜精品| 欧美一区二区三区视频免费播放| 午夜欧美2019年伦理| 欧美一区二区三区色| 蜜臀av亚洲一区中文字幕| 精品久久久久久久人人人人传媒 | 国产精品午夜久久| 成熟亚洲日本毛茸茸凸凹| 国产精品乱码久久久久久| 北岛玲一区二区三区四区| 国产精品久久三区| 91国产成人在线| 天堂午夜影视日韩欧美一区二区| 欧美日韩aaa| 久久国产欧美日韩精品| 久久久久国产精品麻豆| 蜜臀精品久久久久久蜜臀| 精品久久久久久亚洲综合网 | 久久精品视频在线免费观看| 国产麻豆视频一区| 国产日韩欧美综合一区| 91免费看片在线观看| 亚洲 欧美综合在线网络| 亚洲精品一区二区三区99| 成人一级黄色片| 香蕉成人啪国产精品视频综合网| 日韩三级电影网址| 波多野结衣欧美| 日本在线不卡视频| 一区在线观看免费| 欧美一卡二卡在线| 99久久精品国产观看| 丝袜国产日韩另类美女| 国产欧美日韩综合精品一区二区| 欧美性色黄大片| 国产一区二区三区四区五区入口| 自拍偷拍国产亚洲| 精品成人一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 午夜精品免费在线观看| 中文字幕欧美国产| 欧美一区二区精品久久911| av不卡免费在线观看| 六月丁香综合在线视频| 亚洲一区二区三区国产| 中日韩免费视频中文字幕| 欧美一区二区三区小说| 色综合婷婷久久| 国产精品亚洲视频| 日韩电影免费一区| 亚洲乱码日产精品bd| 欧美激情一二三区| 精品99一区二区| 欧美日韩一本到| 99精品国产视频| 国产suv精品一区二区883| 美女脱光内衣内裤视频久久网站| 亚洲美女在线一区| 国产精品短视频| 久久蜜桃av一区二区天堂 | 欧美午夜精品久久久| 懂色av中文字幕一区二区三区 | 成人午夜激情在线| 精品一区二区免费在线观看| 天使萌一区二区三区免费观看| 中文字幕一区二区三| 国产精品女上位| 国产欧美一区二区精品性| 精品美女被调教视频大全网站| 欧美久久久久久久久久| 欧美视频三区在线播放| 在线精品视频免费观看| 日本乱人伦一区| 欧美亚洲日本一区| 91电影在线观看| 欧美日韩一区中文字幕| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 免费人成精品欧美精品 | 成人高清视频在线观看| 成人免费黄色大片| 成人动漫视频在线| 91丨porny丨首页| 一本到高清视频免费精品| 在线一区二区三区四区五区| 欧美亚洲另类激情小说| 欧美精品日韩一本| 精品国产亚洲一区二区三区在线观看| 日韩欧美国产精品| 欧美精品一区二区高清在线观看| 欧美精品一区二区三| 久久久一区二区三区捆绑**| 国产欧美一区二区三区鸳鸯浴 | 91浏览器在线视频| 欧美日韩免费观看一区三区| 欧美电影一区二区| 欧美大胆一级视频| 国产嫩草影院久久久久| 中文字幕日本不卡| 一区二区三区中文在线| 日本亚洲视频在线| 岛国一区二区三区| 欧美四级电影在线观看| 亚洲欧美日韩国产手机在线 | 一区二区三区自拍| 日韩精品一级中文字幕精品视频免费观看| 婷婷综合另类小说色区| 国产一区二区中文字幕| 99精品视频中文字幕| 9191国产精品| 国产精品人成在线观看免费| 一区二区三区中文在线| 麻豆精品国产传媒mv男同| 成人国产精品免费网站| 欧美一级黄色大片| 国产精品不卡在线观看| 日韩黄色免费网站| www.日本不卡| 91精品国产乱码久久蜜臀| 中文字幕中文字幕在线一区| 日韩电影在线观看电影| 91一区二区在线观看| 欧美一区二区三区人| 亚洲视频免费在线| 国产一区二区三区日韩| 欧美日韩亚洲国产综合| 国产三级三级三级精品8ⅰ区| 亚洲在线成人精品| 成人国产精品免费| 日韩欧美国产三级| 亚洲h在线观看| 99麻豆久久久国产精品免费优播| 7777精品伊人久久久大香线蕉的 | 国产精品久久久久影院亚瑟| 六月婷婷色综合| 欧美三级乱人伦电影| 国产精品丝袜一区| 激情都市一区二区| 欧美美女网站色| 亚洲欧美激情一区二区| 国产精品一区在线观看你懂的| 欧美日韩一区二区三区在线看| 欧美激情综合五月色丁香小说| 男人的天堂久久精品| 一本久久a久久免费精品不卡| 国产蜜臀av在线一区二区三区| 久久国产精品一区二区| 欧美日韩一级二级| 亚洲一区二区精品3399| 91视视频在线观看入口直接观看www | 精品日韩一区二区| 午夜精品在线看| 欧美羞羞免费网站| 一区二区三区成人| 色综合一个色综合| 亚洲毛片av在线| 一本久久a久久精品亚洲| 18欧美亚洲精品| 99re成人精品视频| 亚洲欧美日韩中文播放 | 色综合中文综合网| 亚洲精品亚洲人成人网在线播放| 成人的网站免费观看| 国产精品欧美一区喷水| 成人av在线资源网| 亚洲图片激情小说| 色综合中文字幕|