国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

終端I/O之綜述

2024-06-28 13:27:43
字體:
來源:轉載
供稿:網友
終端I/O之綜述

終端I/O有兩種不同的工作模式:

  1. 規范模式輸入處理(Canonical mode input PRocessing)。在這種模式中,終端輸入以行為單位進行處理。對于每個讀要求,終端驅動程序最多返回一行。
  2. 非規范模式輸入處理(Noncanonical mode input processing)。輸入字符并不組成行。

如果不作特殊處理,則默認模式是規范模式。

V7和較早的BSD風格類的終端驅動程序支持三種終端輸入模式:(a)精細加工模式(輸入組成行,并對特殊字符進行處理);(b)原始模式(輸入不組成行,也不對特殊字符進行處理);(c)cbreak模式(輸入不組成行,但對某些特殊字符進行處理)。

終端設備是由一般位于內核中的終端驅動程序控制的每個終端設備有一個輸入隊列和一個輸出隊列,如圖18-1所示。

圖18-1 終端設備的輸入、輸出隊列邏輯結構

將圖18-1轉換為如下圖所示更容易理解:

對此圖要說明以下幾點:

  1. 如果打開了回顯功能,則在輸入隊列和輸出隊列之間有一個隱含的連接。
  2. 輸入隊列的長度MAX_INPUT是有限值,當一個特定設備的輸入隊列已經填滿時,系統對此作何種處理依賴于實現。大多數UNIX系統的處理方式是回顯響鈴字符。
  3. 圖中沒有顯示另一個輸入限制MAX_CANON,它是一個規范模式輸入行中的最大字節數。
  4. 雖然輸出隊列通常也是有限長度,但是程序并不能獲得這個定義其長度的常量,這是因為當輸出隊列將要填滿時,內核使寫進程休眠直至寫隊列中有可用的空間,所以程序無需關心該隊列的長度。
  5. 我們可以使用tcflush函數刷清(flush)輸入或輸出隊列。

大多數UNIX系統在一個稱為終端行規程(terminal line discipline)的模塊中進行規范處理。它是位于內核通用讀、寫函數和實際設備驅動程序之間的模塊(見圖18-2)。

圖18-2 終端行規程

所有我們可以檢測和更改的終端設備特性都包含在termios結構中。該結構定義在頭文件<termios.h>中。

struct termios {

tcflag_tc_iflag;/* input flags */

tcflag_tc_oflag;/* output flags */

tcflag_tc_cflag;/* control flags */

tcflag_tc_lflag;/* local flags */

cc_tc_cc[NCCS];/* control characters */};

粗略而言,輸入標志由終端設備驅動程序用來控制字符的輸入(剝除輸入字節的第8位,允許輸入奇偶校驗等等),輸出標志則控制驅動程序輸出(執行輸出處理、將換行符映射為CR/LF等),控制標志影響到RS-32串行線(忽略調制解調器的狀態線、每個字符的一個或兩個停止位等等),本地標志影響驅動程序和用戶之間的接口(回送的開或關、可視的擦除字符、終端產生的信號啟用以及對后臺輸出的作業控制停止信號等)。

類型tcflag_t的長度足以保存每個標志值。它經常被定義為unsigned int或者unsigned long。c_cc數組包含了所有可以更改的特殊字符。NCCS是該數組的長度,一般介于15-20之間(大多數UNIX系統定義的特殊字符較POSIX所定義的11個要多)。cc_t類型的長度足以保存每個特殊字符,而且它往往是unsigned char型的。

表18-1至表18-4列出了所有可以進行更改以影響終端設備特性的終端標志。注意,雖然Single UNIX Specification定義了所有平臺都支持的公共子集,但是各平臺還有自己的擴充部分。

表18-1 c_cflag終端標志

表18-2 c_iflag終端標志

表18-3 c_lflag終端標志

表18-4 c_oflag終端標志

表18-5列出了Single UNIX Specification所定義的對終端設備進行操作(檢測和更改終端設備的特性)的的各個函數。http://www.CUOXin.com/nufangrensheng/p/3513642.html中已說明了 tcgetpgrp、tcgetsid和tcsetpgrp函數。)

表18-5 終端I/O函數總覽

注意,對終端設備,Single UNIX Specification沒有使用經典的ioctl,而使用了表18-5中列出的13個函數。這樣做的理由是:對于終端設備的ioctl函數,其最后一個參數的數據類型隨執行動作的不同而不同。于是,這使得對參數進行類型檢查成為不可能。

雖然對終端設備進行操作只有13個函數,但是表18-5中頭兩個函數(tcgetattr和tcsetattr)能處理大約70中不同的標志(見表18-至表18-4)。此外,對于終端設備有大量的選項可供使用,對一個特定設備(終端、調制解調器、激光打印機等等)還要決定所需的選項,這些都使對終端設備的處理變得異常復雜。

表18-5中列出的13個函數之間的關系如圖18-3所示:

圖18-3 與終端有關的函數之間的關系


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沁水县| 石渠县| 沅江市| 伊吾县| 报价| 湘西| 隆化县| 磐石市| 揭西县| 政和县| 泌阳县| 汾西县| 石柱| 玉山县| 靖安县| 科技| 宁晋县| 阜阳市| 夹江县| 陇西县| 旅游| 浪卡子县| 长丰县| 甘南县| 瑞金市| 庐江县| 浙江省| 乌鲁木齐市| 西乌珠穆沁旗| 武平县| 安达市| 康定县| 潮安县| 兴仁县| 古田县| 诏安县| 淳安县| 美姑县| 西乌珠穆沁旗| 平顶山市| 定安县|