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

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

?? tty_io.c

?? linux完全注釋的源代碼。內核版本為0.11的linux kernel。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* passed* linux/kernel/tty_io.c** (C) 1991 Linus Torvalds*/#include <set_seg.h>
/** 'tty_io.c'給tty 一種非相關的感覺,是控制臺還是串行通道。該程序同樣* 實現了回顯、規范(熟)模式等。** Kill-line,謝謝John T Kahl。*/#include <ctype.h>		// 字符類型頭文件。定義了一些有關字符類型判斷和轉換的宏。#include <errno.h>		// 錯誤號頭文件。包含系統中各種出錯號。(Linus 從minix 中引進的)。#include <signal.h>		// 信號頭文件。定義信號符號常量,信號結構以及信號操作函數原型。// 下面給出相應信號在信號位圖中的對應比特位。#define ALRMMASK (1<<(SIGALRM-1))	// 警告(alarm)信號屏蔽位。#define KILLMASK (1<<(SIGKILL-1))	// 終止(kill)信號屏蔽位。#define INTMASK (1<<(SIGINT-1))	// 鍵盤中斷(int)信號屏蔽位。#define QUITMASK (1<<(SIGQUIT-1))	// 鍵盤退出(quit)信號屏蔽位。#define TSTPMASK (1<<(SIGTSTP-1))	// tty 發出的停止進程(tty stop)信號屏蔽位。#include <linux/sched.h>	// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/tty.h>		// tty 頭文件,定義了有關tty_io,串行通信方面的參數、常數。#include <asm/segment.h>	// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。#include <asm/system.h>		// 系統頭文件。定義了設置或修改描述符/中斷門等的嵌入式匯編宏。#define _L_FLAG(tty,f) ((tty)->termios.c_lflag & f)	// 取termios 結構中的本地模式標志。#define _I_FLAG(tty,f) ((tty)->termios.c_iflag & f)	// 取termios 結構中的輸入模式標志。#define _O_FLAG(tty,f) ((tty)->termios.c_oflag & f)	// 取termios 結構中的輸出模式標志。// 取termios 結構中本地模式標志集中的一個標志位。#define L_CANON(tty) _L_FLAG((tty),ICANON)	// 取本地模式標志集中規范(熟)模式標志位。#define L_ISIG(tty) _L_FLAG((tty),ISIG)	// 取信號標志位。#define L_ECHO(tty) _L_FLAG((tty),ECHO)	// 取回顯字符標志位。#define L_ECHOE(tty) _L_FLAG((tty),ECHOE)	// 規范模式時,取回顯擦出標志位。#define L_ECHOK(tty) _L_FLAG((tty),ECHOK)	// 規范模式時,取KILL 擦除當前行標志位。#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL)	// 取回顯控制字符標志位。#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE)	// 規范模式時,取KILL 擦除行并回顯標志位。// 取termios 結構中輸入模式標志中的一個標志位。#define I_UCLC(tty) _I_FLAG((tty),IUCLC)	// 取輸入模式標志集中大寫到小寫轉換標志位。#define I_NLCR(tty) _I_FLAG((tty),INLCR)	// 取換行符NL 轉回車符CR 標志位。#define I_CRNL(tty) _I_FLAG((tty),ICRNL)	// 取回車符CR 轉換行符NL 標志位。#define I_NOCR(tty) _I_FLAG((tty),IGNCR)	// 取忽略回車符CR 標志位。// 取termios 結構中輸出模式標志中的一個標志位。#define O_POST(tty) _O_FLAG((tty),OPOST)	// 取輸出模式標志集中執行輸出處理標志。#define O_NLCR(tty) _O_FLAG((tty),ONLCR)	// 取換行符NL 轉回車換行符CR-NL 標志。#define O_CRNL(tty) _O_FLAG((tty),OCRNL)	// 取回車符CR 轉換行符NL 標志。#define O_NLRET(tty) _O_FLAG((tty),ONLRET)	// 取換行符NL 執行回車功能的標志。#define O_LCUC(tty) _O_FLAG((tty),OLCUC)	// 取小寫轉大寫字符標志。// tty 數據結構的tty_table 數組。其中包含三個初始化項數據,分別對應控制臺、串口終端1 和// 串口終端2 的初始化數據。struct tty_struct tty_table[] = {{	{//termios
		ICRNL,			/* 將輸入的CR 轉換為NL */		OPOST | ONLCR,		/* 將輸出的NL 轉CRNL */		0,				// 控制模式標志初始化為0。		ISIG | ICANON | ECHO | ECHOCTL | ECHOKE,	// 本地模式標志。		0,				/* 控制臺termio。 */		INIT_C_CC			// 控制字符數組。
	},	0,				/* 所屬初始進程組。 */	0,				/* 初始停止標志。 */	con_write,			// tty 寫函數指針。	{0, 0, 0, 0, ""},		/* console read-queue */// tty 控制臺讀隊列。	{0, 0, 0, 0, ""},		/* console write-queue */// tty 控制臺寫隊列。	{0, 0, 0, 0, ""}		/* console secondary queue */// tty 控制臺輔助(第二)隊列。}, {	{
		0,			/* no translation */// 輸入模式標志。0,無須轉換。		0,			/* no translation */// 輸出模式標志。0,無須轉換。		B2400 | CS8,		// 控制模式標志。波特率2400bps,8 位數據位。		0,			// 本地模式標志0。		0,			// 行規程0。		INIT_C_CC
	},		// 控制字符數組。	0,			// 所屬初始進程組。	0,			// 初始停止標志。	rs_write,		// 串口1 tty 寫函數指針。	{0x3f8, 0, 0, 0, ""},	/* rs 1 */// 串行終端1 讀緩沖隊列。	{0x3f8, 0, 0, 0, ""},	// 串行終端1 寫緩沖隊列。	{0, 0, 0, 0, ""}		// 串行終端1 輔助緩沖隊列。}, {	{
		0,			/* no translation */// 輸入模式標志。0,無須轉換。		0,			/* no translation */// 輸出模式標志。0,無須轉換。		B2400 | CS8,	// 控制模式標志。波特率2400bps,8 位數據位。		0,			// 本地模式標志0。		0,			// 行規程0。		INIT_C_CC
	},		// 控制字符數組。	0,			// 所屬初始進程組。	0,			// 初始停止標志。	rs_write,		// 串口2 tty 寫函數指針。	{0x2f8, 0, 0, 0, ""},	/* rs 2 */// 串行終端2 讀緩沖隊列。	{0x2f8, 0, 0, 0, ""},	// 串行終端2 寫緩沖隊列。	{0, 0, 0, 0, ""}	// 串行終端2 輔助緩沖隊列。}};/** 下面是匯編程序使用的緩沖隊列地址表。通過修改你可以實現* 偽tty 終端或其它終端類型。目前還沒有這樣做。*/// tty 緩沖隊列地址表。rs_io.s 匯編程序使用,用于取得讀寫緩沖隊列地址。struct tty_queue *table_list[] = {  &tty_table[0].read_q, &tty_table[0].write_q,	// 控制臺終端讀、寫緩沖隊列地址。  &tty_table[1].read_q, &tty_table[1].write_q,	// 串行口1 終端讀、寫緩沖隊列地址。  &tty_table[2].read_q, &tty_table[2].write_q	// 串行口2 終端讀、寫緩沖隊列地址。};//// tty 終端初始化函數。// 初始化串口終端和控制臺終端。void tty_init (void){	rs_init ();			// 初始化串行中斷程序和串行接口1 和2。(serial.c, 37)	con_init ();			// 初始化控制臺終端。(console.c, 617)}//// tty 鍵盤終端字符處理函數。// 參數:tty - 相應tty 終端結構指針;mask - 信號屏蔽位。void tty_intr (struct tty_struct *tty, int mask){	int i;// 如果tty 所屬組號小于等于0,則退出。	if (tty->pgrp <= 0)		return;// 掃描任務數組,向tty 相應組的所有任務發送指定的信號。	for (i = 0; i < NR_TASKS; i++) {		// 如果該項任務指針不為空,并且其組號等于tty 組號,則設置該任務指定的信號mask。		if (task[i] && task[i]->pgrp == tty->pgrp)			task[i]->signal |= mask;
	}}//// 如果隊列緩沖區空則讓進程進入可中斷的睡眠狀態。// 參數:queue - 指定隊列的指針。// 進程在取隊列緩沖區中字符時調用此函數。static voidsleep_if_empty (struct tty_queue *queue){	cli ();			// 關中斷。// 若當前進程沒有信號要處理并且指定的隊列緩沖區空,則讓進程進入可中斷睡眠狀態,并讓// 隊列的進程等待指針指向該進程。	while (!current->signal && EMPTY (*queue))		interruptible_sleep_on (&queue->proc_list);	sti ();			// 開中斷。}//// 若隊列緩沖區滿則讓進程進入可中斷的睡眠狀態。// 參數:queue - 指定隊列的指針。// 進程在往隊列緩沖區中寫入時調用此函數。static voidsleep_if_full (struct tty_queue *queue){// 若隊列緩沖區不滿,則返回退出。	if (!FULL (*queue))		return;	cli ();			// 關中斷。// 如果進程沒有信號需要處理并且隊列緩沖區中空閑剩余區長度<128,則讓進程進入可中斷睡眠狀態,// 并讓該隊列的進程等待指針指向該進程。	while (!current->signal && LEFT (*queue) < 128)		interruptible_sleep_on (&queue->proc_list);	sti ();			// 開中斷。}//// 等待按鍵。// 如果控制臺的讀隊列緩沖區空則讓進程進入可中斷的睡眠狀態。void wait_for_keypress (void){	sleep_if_empty (&tty_table[0].secondary);}//// 復制成規范模式字符序列。// 將指定tty 終端隊列緩沖區中的字符復制成規范(熟)模式字符并存放在輔助隊列(規范模式隊列)中。// 參數:tty - 指定終端的tty 結構。void copy_to_cooked (struct tty_struct *tty){	signed char c;// 如果tty 的讀隊列緩沖區不空并且輔助隊列緩沖區為空,則循環執行下列代碼。	while (!EMPTY (tty->read_q) && !FULL (tty->secondary))	{// 從隊列尾處取一字符到c,并前移尾指針。		GETCH (tty->read_q, c);// 下面對輸入字符,利用輸入模式標志集進行處理。// 如果該字符是回車符CR(13),則:若回車轉換行標志CRNL 置位則將該字符轉換為換行符NL(10);// 否則若忽略回車標志NOCR 置位,則忽略該字符,繼續處理其它字符。		if (c == 13) {			if (I_CRNL (tty))				c = 10;			else if (I_NOCR (tty))				continue;			else;// 如果該字符是換行符NL(10)并且換行轉回車標志NLCR 置位,則將其轉換為回車符CR(13)。		} else if (c == 10 && I_NLCR (tty))			c = 13;// 如果大寫轉小寫標志UCLC 置位,則將該字符轉換為小寫字符。		if (I_UCLC (tty))			c = tolower (c);// 如果本地模式標志集中規范(熟)模式標志CANON 置位,則進行以下處理。		if (L_CANON (tty))		{// 如果該字符是鍵盤終止控制字符KILL(^U),則進行刪除輸入行處理。			if (c == KILL_CHAR (tty))			{/* deal with killing the input line *//* 刪除輸入行處理 */// 如果tty 輔助隊列不空,或者輔助隊列中最后一個字符是換行NL(10),或者該字符是文件結束字符// (^D),則循環執行下列代碼。				while (!(EMPTY (tty->secondary) ||					(c = LAST (tty->secondary)) == 10 ||					c == EOF_CHAR (tty)))				{// 如果本地回顯標志ECHO 置位,那么:若字符是控制字符(值<32),則往tty 的寫隊列中放入擦除// 字符ERASE。再放入一個擦除字符ERASE,并且調用該tty 的寫函數。					if (L_ECHO (tty))					{						if (c < 32)							PUTCH (127, tty->write_q);						PUTCH (127, tty->write_q);						tty->write (tty);					}// 將tty 輔助隊列頭指針后退1 字節。					DEC (tty->secondary.head);				}				continue;		// 繼續讀取并處理其它字符。			}// 如果該字符是刪除控制字符ERASE(^H),那么:			if (c == ERASE_CHAR (tty))			{// 若tty 的輔助隊列為空,或者其最后一個字符是換行符NL(10),或者是文件結束符,繼續處理// 其它字符。				if (EMPTY (tty->secondary) ||					(c = LAST (tty->secondary)) == 10 || c == EOF_CHAR (tty))					continue;// 如果本地回顯標志ECHO 置位,那么:若字符是控制字符(值<32),則往tty 的寫隊列中放入擦除// 字符ERASE。再放入一個擦除字符ERASE,并且調用該tty 的寫函數。				if (L_ECHO (tty))				{					if (c < 32)						PUTCH (127, tty->write_q);					PUTCH (127, tty->write_q);					tty->write (tty);				}// 將tty 輔助隊列頭指針后退1 字節,繼續處理其它字符。				DEC (tty->secondary.head);				continue;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲精品一区二区乱码| 国产福利一区二区| 亚洲自拍偷拍网站| 亚洲人成亚洲人成在线观看图片| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩精品在线网站| 精品国产免费一区二区三区四区| 精品久久久久久最新网址| 亚洲精品一区二区在线观看| 欧美v亚洲v综合ⅴ国产v| 欧美电视剧免费观看| 久久嫩草精品久久久精品一| 国产精品丝袜黑色高跟| 一区二区三区中文免费| 首页亚洲欧美制服丝腿| 蜜桃av一区二区在线观看| 国产在线乱码一区二区三区| 国产成人在线网站| 色天使色偷偷av一区二区| 欧美日韩国产综合一区二区| 欧美成人一区二区三区片免费 | 日韩黄色一级片| 秋霞午夜鲁丝一区二区老狼| 蜜桃视频一区二区| 成人av网站免费观看| 欧美日韩一区中文字幕| 精品国产91亚洲一区二区三区婷婷| 欧美国产1区2区| 亚洲午夜电影在线观看| 国产麻豆视频精品| 欧洲精品在线观看| 久久久久久夜精品精品免费| 一区二区三区日韩在线观看| 麻豆精品在线视频| 91麻豆免费在线观看| 日韩色视频在线观看| 亚洲欧美视频在线观看视频| 美女视频黄免费的久久| 97久久精品人人做人人爽50路| 欧美男女性生活在线直播观看| 久久精品欧美日韩| 日韩制服丝袜先锋影音| thepron国产精品| 欧美电视剧免费全集观看| 亚洲免费观看高清完整| 国产精品1区2区3区| 91精品啪在线观看国产60岁| 国产精品久久久久天堂| 激情综合色综合久久综合| 欧美三级日本三级少妇99| 中文字幕不卡在线观看| 激情久久五月天| 日韩一区二区中文字幕| 亚洲电影一区二区| 色综合欧美在线视频区| 中文字幕成人网| 国产乱一区二区| 精品卡一卡二卡三卡四在线| 亚洲国产成人av| 欧美三区在线观看| 亚洲综合色在线| 日本韩国一区二区三区| 亚洲欧美国产三级| 波多野结衣中文字幕一区| 久久男人中文字幕资源站| 奇米影视一区二区三区| 在线不卡a资源高清| 亚洲一区在线电影| 欧美色图免费看| 亚洲国产美女搞黄色| 欧美亚洲免费在线一区| 亚洲高清免费在线| 91精品国产综合久久精品麻豆| 亚洲午夜国产一区99re久久| 欧美日韩一卡二卡三卡| 日韩福利电影在线观看| 91精品国产色综合久久ai换脸| 丝袜美腿一区二区三区| 欧美一级在线视频| 国产真实精品久久二三区| 26uuu久久综合| 国产成人免费视频网站高清观看视频| 久久午夜电影网| 成人性生交大合| 亚洲最新视频在线观看| 欧美少妇性性性| 久久国产综合精品| 国产日产精品1区| 99re8在线精品视频免费播放| 亚洲欧美另类图片小说| 欧美色图片你懂的| 看国产成人h片视频| 国产日产欧美一区| 色天天综合色天天久久| 日韩影视精彩在线| 久久精品视频一区二区三区| yourporn久久国产精品| 亚洲一区二区美女| 久久久亚洲欧洲日产国码αv| 高清在线成人网| 亚洲国产aⅴ成人精品无吗| 欧美刺激脚交jootjob| 97se亚洲国产综合自在线观| 日韩和的一区二区| 国产欧美一二三区| 欧美日韩aaa| caoporen国产精品视频| 日本中文一区二区三区| 国产精品私人影院| 日韩午夜电影在线观看| 91网站在线播放| 久久99久久久久久久久久久| 亚洲三级在线播放| 欧美成人a∨高清免费观看| 色婷婷精品久久二区二区蜜臂av| 久久不见久久见免费视频7| 中文字幕一区二区三中文字幕| 在线成人av网站| 91影院在线免费观看| 精品一区二区三区在线播放| 亚洲欧美激情插| 国产欧美日韩不卡| 日韩欧美一区二区三区在线| 色拍拍在线精品视频8848| 国产精品一区久久久久| 日韩va亚洲va欧美va久久| 一区二区视频在线看| 久久精品综合网| 日韩免费高清电影| 欧美日韩极品在线观看一区| 94-欧美-setu| 成人av免费网站| 国产激情视频一区二区三区欧美| 日韩国产在线观看| 亚洲国产乱码最新视频| 亚洲精选一二三| 国产精品久久久久7777按摩| 久久女同精品一区二区| 日韩欧美一区二区视频| 欧美日韩另类一区| 欧美中文字幕久久| 日本电影欧美片| 91视频国产观看| 91在线国内视频| 成人免费毛片片v| 粉嫩av一区二区三区| 国产91精品一区二区麻豆网站| 精品一区免费av| 狠狠网亚洲精品| 国内精品国产成人国产三级粉色 | 亚洲成精国产精品女| 樱桃国产成人精品视频| 亚洲男同性恋视频| 亚洲精品伦理在线| 亚洲免费观看高清| 亚洲成av人影院在线观看网| 亚洲观看高清完整版在线观看| 亚洲成在线观看| 青娱乐精品视频| 精品一区二区三区免费播放| 国产在线精品不卡| 成人一区二区三区视频在线观看 | 国产亚洲一区二区在线观看| 精品久久久三级丝袜| 久久午夜老司机| 日韩毛片高清在线播放| 亚洲综合视频网| 美女一区二区三区| 懂色av一区二区三区免费观看| av在线不卡网| 欧美日本一区二区三区四区| 欧美tickling网站挠脚心| 国产亚洲欧美在线| 亚洲欧美国产三级| 蜜芽一区二区三区| 丰满少妇久久久久久久| 在线观看日韩高清av| 717成人午夜免费福利电影| 亚洲精品在线观看视频| 国产精品九色蝌蚪自拍| 五月婷婷综合在线| 粉嫩高潮美女一区二区三区| 色伊人久久综合中文字幕| 日韩一级免费一区| 最新欧美精品一区二区三区| 视频一区二区中文字幕| 久草中文综合在线| 91麻豆国产福利在线观看| 日韩一级高清毛片| 国产精品高潮呻吟久久| 五月婷婷激情综合网| 国产激情视频一区二区在线观看| 色综合色狠狠天天综合色| 日韩欧美激情四射| 亚洲免费电影在线| 国产风韵犹存在线视精品| 欧美久久婷婷综合色| 中文字幕中文字幕一区二区| 久久国产三级精品| 欧美特级限制片免费在线观看|