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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tty_io.c

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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合色中文字幕| 亚洲香蕉伊在人在线观| 91国产成人在线| 精彩视频一区二区三区| 亚洲一区二区视频| 欧美国产综合一区二区| 欧美一二三四区在线| 色琪琪一区二区三区亚洲区| 国产高清亚洲一区| 免费高清不卡av| 亚洲国产精品久久久男人的天堂| 欧美国产精品一区| www国产成人| 精品日韩成人av| 正在播放亚洲一区| 欧美视频一区在线| 99re热这里只有精品免费视频 | 伊人色综合久久天天人手人婷| 久久亚洲精精品中文字幕早川悠里| 欧美日韩精品一区二区| 91久久人澡人人添人人爽欧美| 国产 欧美在线| 国产精品主播直播| 极品尤物av久久免费看| 精品一二三四区| 免费成人av资源网| 日本不卡免费在线视频| 日韩中文欧美在线| 视频在线观看国产精品| 三级不卡在线观看| 日韩制服丝袜av| 日本欧美一区二区在线观看| 亚洲国产精品视频| 香蕉成人伊视频在线观看| 亚洲国产一区视频| 婷婷国产v国产偷v亚洲高清| 香蕉久久一区二区不卡无毒影院| 亚洲一卡二卡三卡四卡| 亚洲成人av中文| 日本在线不卡视频| 久久成人综合网| 国产乱码精品1区2区3区| 国产电影一区在线| www..com久久爱| 一本一本大道香蕉久在线精品| 色综合久久天天综合网| 精品视频999| 67194成人在线观看| 欧美大尺度电影在线| 精品国产污污免费网站入口| 久久久精品国产免大香伊| 国产无人区一区二区三区| 国产女主播在线一区二区| 日韩毛片高清在线播放| 一卡二卡欧美日韩| 日本一不卡视频| 国产大陆a不卡| 99精品视频中文字幕| 欧美色图一区二区三区| 日韩欧美区一区二| 中文欧美字幕免费| 一区二区三区 在线观看视频 | 成人av在线一区二区| 国产成人免费视频网站| 日韩欧美第一区| 久久一留热品黄| 亚洲国产精品成人综合色在线婷婷| 中文字幕的久久| 亚洲精品乱码久久久久久黑人| 亚洲成人午夜电影| 国产综合久久久久久久久久久久| 成人黄色777网| 欧美美女一区二区三区| 久久久精品人体av艺术| 一区二区三区精品在线| 寂寞少妇一区二区三区| 色哟哟一区二区在线观看| 5566中文字幕一区二区电影| 国产色产综合色产在线视频| 亚洲制服丝袜av| 国产激情视频一区二区三区欧美| 色欧美88888久久久久久影院| 日韩视频一区二区三区 | 欧美一区二区三区影视| 国产人成一区二区三区影院| 亚洲综合视频网| 国产东北露脸精品视频| 欧美另类变人与禽xxxxx| 中文字幕av一区二区三区高| 日韩黄色一级片| 91麻豆国产精品久久| 精品sm在线观看| 亚洲成人精品在线观看| 成人午夜视频在线| 精品三级在线看| 一区二区三区不卡视频在线观看| 国产馆精品极品| 欧美一区二区在线观看| 亚洲欧美电影一区二区| 国产精品白丝av| 日韩一区二区精品| 亚洲国产欧美日韩另类综合 | 国产日韩欧美精品电影三级在线| 亚洲va国产va欧美va观看| av资源网一区| 国产亚洲欧美在线| 青青草国产成人99久久| 欧美日韩中文一区| 亚洲色图色小说| 粉嫩绯色av一区二区在线观看| 日韩欧美一区二区免费| 香港成人在线视频| 91国偷自产一区二区三区观看| 国产精品久久久久久久久免费相片| 蜜桃视频第一区免费观看| 欧美日韩国产综合久久| 亚洲精选一二三| 91免费版pro下载短视频| 国产精品丝袜在线| 粉嫩av一区二区三区| 国产日韩高清在线| 国产剧情在线观看一区二区| 精品日韩欧美在线| 美美哒免费高清在线观看视频一区二区| 欧美三级一区二区| 亚洲高清免费观看| 欧美午夜电影在线播放| 亚洲午夜成aⅴ人片| 欧美在线看片a免费观看| 一二三四区精品视频| 日本精品一区二区三区高清| 亚洲图片欧美激情| 91性感美女视频| 亚洲免费高清视频在线| 色综合久久综合| 亚洲一区日韩精品中文字幕| 在线观看一区二区视频| 亚欧色一区w666天堂| 91麻豆精品久久久久蜜臀| 日韩中文欧美在线| 精品日韩欧美在线| 国产很黄免费观看久久| 国产精品久久久久婷婷二区次| a级精品国产片在线观看| 亚洲天堂av一区| 在线看不卡av| 天天爽夜夜爽夜夜爽精品视频| 欧美一区二区私人影院日本| 精品写真视频在线观看| 久久精品男人天堂av| 懂色av一区二区三区蜜臀 | 国产日本一区二区| 成人久久18免费网站麻豆| 亚洲男人天堂av网| 欧美日韩一卡二卡三卡 | 美女一区二区三区在线观看| 精品国产麻豆免费人成网站| 高清不卡在线观看av| 亚洲精品久久久蜜桃| 337p亚洲精品色噜噜狠狠| 国产麻豆午夜三级精品| 国产精品美日韩| 欧美视频你懂的| 韩国毛片一区二区三区| 亚洲色图丝袜美腿| 欧美一区二区黄| 国产成人无遮挡在线视频| 亚洲嫩草精品久久| 欧美一区二区三区四区久久| 国产一区二区不卡| 亚洲精品日韩专区silk| 欧美一级在线观看| av电影在线观看不卡 | 91污在线观看| 日韩高清一级片| 亚洲欧美在线另类| 91精品国产色综合久久不卡蜜臀| 国产69精品久久99不卡| 亚洲国产日韩精品| 国产亚洲成年网址在线观看| 在线亚洲一区二区| 国产麻豆视频一区| 亚洲成年人影院| 久久九九全国免费| 国产99一区视频免费| 亚洲第一av色| 国产欧美一区二区精品秋霞影院| 在线观看不卡视频| 国产馆精品极品| 日韩精品每日更新| 亚洲免费观看高清在线观看| www国产成人免费观看视频 深夜成人网| 色婷婷久久一区二区三区麻豆| 久久国产麻豆精品| 亚洲成av人片在线观看无码| 中文字幕一区不卡| 久久伊99综合婷婷久久伊| 欧美精品久久久久久久久老牛影院| www.亚洲国产| 激情图区综合网|