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

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

?? tty_io.c

?? LINUX 0.11版內核代碼。 并有代碼分析說明。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/** linux/kernel/tty_io.c** (C) 1991 Linus Torvalds*//** 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles* or rs-channels. It also implements echoing, cooked mode etc.** Kill-line thanks to John T Kohl.*//** '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[] = {  {   {ICRNL,			/* change incoming CR to NL *//* 將輸入的CR 轉換為NL */    OPOST | ONLCR,		/* change outgoing NL to CRNL *//* 將輸出的NL 轉CRNL */    0,				// 控制模式標志初始化為0。    ISIG | ICANON | ECHO | ECHOCTL | ECHOKE,	// 本地模式標志。    0,				/* console termio */// 控制臺termio。    INIT_C_CC},			// 控制字符數組。   0,				/* initial pgrp */// 所屬初始進程組。   0,				/* initial stopped */// 初始停止標志。   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 輔助緩沖隊列。	   }};/** these are the tables used by the machine code handlers.* you can implement pseudo-tty's or something by changing* them. Currently not done.*//** 下面是匯編程序使用的緩沖隊列地址表。通過修改你可以實現* 偽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 終端初始化函數。// 初始化串口終端和控制臺終端。voidtty_init (void){  rs_init ();			// 初始化串行中斷程序和串行接口1 和2。(serial.c, 37)  con_init ();			// 初始化控制臺終端。(console.c, 617)}//// tty 鍵盤終端字符處理函數。// 參數:tty - 相應tty 終端結構指針;mask - 信號屏蔽位。voidtty_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 ();			// 開中斷。}//// 等待按鍵。// 如果控制臺的讀隊列緩沖區空則讓進程進入可中斷的睡眠狀態。voidwait_for_keypress (void){  sleep_if_empty (&tty_table[0].secondary);}//// 復制成規范模式字符序列。// 將指定tty 終端隊列緩沖區中的字符復制成規范(熟)模式字符并存放在輔助隊列(規范模式隊列)中。// 參數:tty - 指定終端的tty 結構。voidcopy_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;	    }//如果該字符是停止字符(^S),則置tty 停止標志,繼續處理其它字符。	  if (c == STOP_CHAR (tty))	    {	      tty->stopped = 1;	      continue;	    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲曰韩产成在线| 欧美国产视频在线| 色悠悠久久综合| 成人ar影院免费观看视频| 东方欧美亚洲色图在线| 国产剧情一区在线| 国产精品一卡二卡在线观看| 国产精品99久久久久久似苏梦涵| 国产在线精品一区二区| 激情综合色播激情啊| 国产经典欧美精品| 成人a区在线观看| 欧美性xxxxxx少妇| 91精品国产综合久久蜜臀| 日韩美一区二区三区| 精品剧情在线观看| 亚洲国产电影在线观看| 亚洲女同女同女同女同女同69| 亚洲激情校园春色| 日韩电影在线看| 国产精一区二区三区| av午夜一区麻豆| 欧美性欧美巨大黑白大战| 欧美一区二区三区思思人| 久久美女高清视频| 亚洲精品欧美二区三区中文字幕| 日韩一区欧美二区| 国产成人激情av| 色婷婷精品久久二区二区蜜臂av| 欧美精品久久一区| 亚洲国产精品成人综合色在线婷婷| 亚洲乱码一区二区三区在线观看| 亚洲成在线观看| 国产精品小仙女| 在线视频一区二区三| 精品国产麻豆免费人成网站| 中文字幕在线观看一区| 日韩国产欧美在线观看| 成人av网站在线观看免费| 欧美精品高清视频| 中文字幕免费一区| 麻豆精品一区二区av白丝在线| 成人看片黄a免费看在线| 欧美高清你懂得| 亚洲女与黑人做爰| 成人一道本在线| 精品久久久网站| 天天操天天干天天综合网| 成人一区二区三区| 久久这里都是精品| 日韩制服丝袜先锋影音| 色综合久久中文字幕综合网| 久久免费午夜影院| 奇米色777欧美一区二区| 在线亚洲一区观看| 国产精品欧美精品| 久久精品99久久久| 91精品蜜臀在线一区尤物| 樱桃视频在线观看一区| 久久国产精品色| 日韩一区和二区| 婷婷久久综合九色综合伊人色| 色吊一区二区三区| 亚洲色图清纯唯美| 99久久er热在这里只有精品66| 久久久久99精品一区| 狠狠色丁香婷婷综合久久片| 欧美一区二区在线视频| 亚洲国产精品精华液网站| 一本到高清视频免费精品| 国产精品乱码人人做人人爱| 国产精品911| 国产亚洲va综合人人澡精品| 精品一区二区三区在线视频| 欧美一区二区美女| 毛片av一区二区| 精品美女一区二区三区| 国产乱码精品1区2区3区| 国产亚洲欧美日韩日本| 国产成人av电影免费在线观看| 久久久久国产免费免费| 成人天堂资源www在线| 中文字幕亚洲电影| 色视频一区二区| 亚洲高清视频中文字幕| 欧美理论片在线| 久久精工是国产品牌吗| 久久网站最新地址| 成人性生交大片免费看在线播放| 中文字幕制服丝袜一区二区三区 | 国产永久精品大片wwwapp| 日韩一本二本av| 国产一区二区免费看| 亚洲国产成人自拍| 欧洲精品一区二区三区在线观看| 香蕉影视欧美成人| 精品国产伦一区二区三区免费| 国产精品18久久久久久久久| 国产精品成人免费在线| 制服丝袜av成人在线看| 国产精品一区一区三区| 亚洲欧美韩国综合色| 日韩三级av在线播放| 成人av在线资源网| 日韩成人午夜电影| 日本一区二区久久| 欧美精品久久天天躁| 国产精品亚洲午夜一区二区三区 | 精品播放一区二区| 不卡一区二区三区四区| 丝袜美腿亚洲色图| 1区2区3区国产精品| 欧美一级xxx| 在线影视一区二区三区| 国产精品91一区二区| 日韩精品成人一区二区三区| 国产亚洲欧美激情| 91精品免费在线| 色婷婷久久一区二区三区麻豆| 久久国产婷婷国产香蕉| 亚洲欧美另类久久久精品2019| 精品久久久久久综合日本欧美 | 欧美日韩国产123区| 国产一区美女在线| 亚洲亚洲人成综合网络| 欧美激情一区二区在线| 正在播放一区二区| 色综合久久久久| 成人免费va视频| 国产a精品视频| 久久超级碰视频| 日本少妇一区二区| 亚洲成a人片综合在线| 亚洲色图在线播放| 国产精品你懂的在线欣赏| 日韩女优av电影在线观看| 欧美精品第1页| 欧美三级电影在线观看| 99久久国产免费看| 91在线免费看| 福利91精品一区二区三区| 极品尤物av久久免费看| 免费成人美女在线观看| 亚洲午夜久久久| 亚洲精品国产视频| 综合久久一区二区三区| 亚洲国产精品精华液ab| 中文字幕av不卡| 亚洲国产精品传媒在线观看| 国产日韩av一区二区| 久久―日本道色综合久久| 久久亚区不卡日本| 国产亚洲va综合人人澡精品| 久久婷婷成人综合色| 欧美不卡视频一区| 欧美mv日韩mv国产| 久久久午夜电影| 国产欧美日韩精品a在线观看| 欧美精品一区二区三区视频 | 亚洲女同女同女同女同女同69| 国产精品久久久久aaaa| 国产精品美女久久久久久久久| 中文字幕中文字幕在线一区| 亚洲欧美日韩久久精品| 亚洲一区欧美一区| 日韩精品一卡二卡三卡四卡无卡| 首页国产欧美久久| 乱一区二区av| 成a人片亚洲日本久久| 色综合久久88色综合天天6| 日本高清不卡一区| 日韩一区二区免费高清| 久久久噜噜噜久噜久久综合| 国产精品二三区| 午夜精品福利一区二区三区av| 麻豆成人91精品二区三区| 国产成人精品免费看| 在线一区二区视频| 欧美r级电影在线观看| 欧美韩日一区二区三区四区| 亚洲一区二区三区四区在线观看 | 色婷婷久久99综合精品jk白丝| 欧美在线视频全部完| 日韩一级免费一区| 中文字幕的久久| 日韩av电影一区| 成人av综合一区| 欧美一区二区久久久| 中文字幕在线一区免费| 天天做天天摸天天爽国产一区| 国产精品亚洲а∨天堂免在线| 欧美性猛片xxxx免费看久爱| 2欧美一区二区三区在线观看视频| 18成人在线视频| 国产乱子伦视频一区二区三区 | 欧美猛男男办公室激情| 久久精品一区二区三区不卡| 亚洲最大成人网4388xx| 国产精品一区二区三区乱码| 337p亚洲精品色噜噜狠狠|