国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 學院 > 操作系統(tǒng) > 正文

終端

2024-06-28 16:03:39
字體:
來源:轉載
供稿:網(wǎng)友

何為終端:

http://www.PRogramgo.com/article/8062473246/

http://www.programgo.com/article/7784652169/;jsessionid=242CCD1156839513C97203D4E4623CB7

一個終端模擬器打開的窗口可以視為一個終端,tty1到tty7也是終端

終端也是一個設備文件,通常一個終端有自己的標準輸入,標準輸出,標準錯誤,它們都可以被重定向。

有一個特殊設備/dev/tty始終指向當前終端或當前的登錄回話。通過對/dev/tty操作來避免重定向導致的問題

若想知道標準輸出是否被重定向,只需要檢查底層文件描述符是否關聯(lián)到一個終端即可。

系統(tǒng)調用

#include <unisd.h>

int isatty(int fd):

如果打開的文件描述符fd連接到一個終端,則系統(tǒng)調用isatty返回1,否者返回0;。

終端驅動程序和通用接口:

有時,程序需要更加精細的終端控制能力,而不是僅通過簡單的文件操作來完成對終端的一些控制。

linux提供了一組編程接口用來控制終端驅動程序的行為,從而使得更好地控制終端的輸入和輸出。

termios是在POSIX規(guī)范中定義的標準接口。通過設置termios類型的數(shù)據(jù)結構中的值和使用一小組

函數(shù)調用,你就可以對終端接口進行控制。

可以被調整用來影響終端的值按照不同的模式被分成如下幾組:

輸入模式

輸出模式

控制模式

本地模式

特殊控制字符

最小termios結構的典型定義如下

#include <termios.h>

struct termios{

    tcflag_t c_iflag;

    tcflag_t c_oflag;

    tcflag_t c_cflag;

    tcflag_t c_lflag;

    cc_t      c_cc[NCCS];

};

int tcgetattr(int fd, struct termios *termios_p);

把當前終端接口變量的值寫入termios_p參數(shù)指向的結構。

int tcsetattr(int fd, int actions, const struct termios *termios_p);

把termios_p的值寫入終端設置,此外程序有責任將終端狀態(tài)恢復為改變之前的狀態(tài)

action參數(shù):

TCSANOW:立刻對值進行修改

TCSADRAIN:等當前的輸出完成后再對值進行修改

TCSAFLUSH:等當前的輸出完成后再對值進行修改,但丟棄還未從read調用返回的當前可用的任何輸入

輸入模式:

輸入模式控制輸入數(shù)據(jù)(終端驅動程序從串行口或鍵盤接收到的字符)在被傳遞給程序之前的處理方式。

通過設置termios結構中的c_iflag成員的標志對它們進行控制。所有的標志都被定義為宏

一般默認設置就可以,無需改動。

如下:

BRKINT: 在當前輸入行檢測到一個終止狀態(tài)時,產(chǎn)生一個中斷

IGNBRK: 忽略輸入行中的終止狀態(tài)

ICRNL: 將接收到的回車符轉換為新行符

IGNCR: 忽略接收到的回車符

INLCR: 將接收到的新行符轉換為回車符

IGNPAR: 忽略奇偶校驗錯誤的字符

INPCK: 對接收到的字符執(zhí)行奇偶校驗

PARMRK: 對奇偶校驗出錯做出標記

ISTRip: 將所有接收到的字符裁剪為7比特

IXOFF: 對輸入啟用軟件流控

IXON: 對輸出啟用軟件流控

輸出模式:

同樣的通過設置c_oflag來控制,如果OPOST沒有被設置,則其他所有標志都被忽略

OPOST 打開輸出處理功能

ONLCR 將輸出中的換行符轉換為回車/換行符

OCRNL 將輸出中的回車符轉換為新行符

ONOCR 在第0列不輸出回車符

ONLRET 不輸出回車符

OFILL 發(fā)送填充字符以提供延時

OFDEL 用DEL而不是NULL字符作為填充字符

NLDLY 新行符延時選擇

CRDLY 回車符延時選擇

TABDLY 制表符延時選擇

BSDLY 退格符延時選擇

VTDLY 垂直制表符延時選擇

FFDLY 換頁符延時選擇

控制模式:

控制模式控制終端的硬件特性。同樣的設置c_cflag成員

控制模式主要用于串行線連接調制解調器的情況,雖然它也可以用來和終端進行“對話”。但與通過使用termios的控制模式來修改默認的線路行為相比,直接修改終端配置文件通常更加容易些。????

CLOCAL 忽略所有調制解調器狀態(tài)的狀態(tài)行

CREAD 啟用字符接收器

CS5 發(fā)送或接收字符時使用5比特

CS6 發(fā)送或接收字符時使用6比特

CS7 發(fā)送或接收字符時使用7比特

CS8 發(fā)送或接收字符時使用8比特

CSTOPB 每個字符使用兩個停止位而不是一個

HUPCL 關閉時掛斷調制解調器,

PARENB 啟用奇偶校驗碼的生成和檢測功能

PARODD 使用奇校驗而不是偶校驗

本地模式:

本地模式控制終端的各種特性,通過設置c_lflag成員

ECHO ***啟用輸入字符的本地回顯功能

ECHOE 接收到ERASE時執(zhí)行退格、空格、退格的動作組合

ECHOK 接收到KILL字符時執(zhí)行行刪除操作

ECHONL 回顯新行符

ICANON ***啟用標準輸入處理

IEXTEN 啟用基于特定實現(xiàn)的函數(shù)

ISIG 啟用信號

NOFLSH 禁止清空隊列

TOSTOP 在試圖進行寫操作之前給后臺進程發(fā)送一個信號

特殊控制字符:

特殊控制字符是一些字符組合,如Ctrl+C,當用戶鍵入這樣的組合鍵時,終端會采取一些特殊的處理方式。

c_cc數(shù)組成員將各種特殊控制字符映射到對應的支持函數(shù)。每個字符的位置(也就是數(shù)組下標)是由一個宏定義的,

但并不限制這些字符必須是控制字符。

根據(jù)本地模式中的ICANON標志,即是否將終端設置為標準模式或非標準模式c_cc數(shù)組有很大差別。

在標準模式下可用的數(shù)組下標

VEOF

VEOL

VERASE

VINTR

VKILL

VQUIT

VSUSP

VSTART

VSTOP

在非標準模式下可用的數(shù)組下標

VINTR

VMIN

VQUIT

VSUSP

VTIME

VSTART

VSTOP

在shell下使用stty -a可以查看當前的termios設置情況

終端速度:

speed_t cfgetispeed(const struct termios *);

speed_t cfgetospeed(const struct termios *);

int cfsetispeed(struct termios *, speed_t speed);

int cfsetospeed(struct termios *, speed_t speed);

這些函數(shù)都是作用于termios結構體的,所以需要調用tcsetattr才能生效

speed參數(shù)可以為B0, B1200, B2400, B9600, B19200, B38400

其他函數(shù):

int tcdrain(int fd);//等待所有的輸出,才返回

int tcflow(int fd, int flowtype);//暫停或重新開始輸出

int tcflush(int fd, int in_out_selector);//清空輸入、輸出或兩者都清空

終端的輸出:

通過termios可以控制鍵盤的輸入,但是確不能夠控制輸出到屏幕的內(nèi)容。比如在特定的位置輸出。

幾乎所有的終端都是用escape轉義序列控制(以escape字符開頭的字符串)來控制光標的位置和終端的其他屬性——比如黑體和閃爍等,但是他們在實現(xiàn)手段上沒有統(tǒng)一的標準。terminfo軟件包便解決了,終端之間的差異問題,使程序的移植性更好。

terminfo軟件包包含一個由大量不同類型終端的功能標志和escape轉義序列等信息構成的數(shù)據(jù)庫,并為它們提供了一個統(tǒng)一的編程接口。一個使用這個軟件包的程序能夠隨著數(shù)據(jù)庫的擴展來適應未來的終端類型,對不同類型終端的支持不再需要由應用程序自身來提供。

每個終端類型對應一個terminfo文件。每個terminfo定義由3種類型的數(shù)據(jù)項組成。每個數(shù)據(jù)項被成為capname(可以簡單的將一個數(shù)據(jù)項理解為這個終端的什么輸入與什么動作或什么信息之間的映射關系),它們分別用于終端的一種功能標志,三種類型的功能標志為。

布爾功能標志:指出終端是否支持某個特定的功能 比如支持XON/XOFF流控 xon

數(shù)值功能標志:定義長度 比如 cols#80 lines#24

字符串功能標志:它有兩種終端作用 ,用于訪問終端功能的輸出字符串和當用戶按下特定按鍵時終端接收   到的輸入字符串。比如刪除到行尾 el=Esc,[,K 它在terminfo源文件中寫為el=/E[K,還有很多內(nèi)容不詳細列舉(page165)

使用terminfo功能標志:

使用terminfo的第一步是調用setupterm設置終端類型,這將為當前的終端類型初始化一個TERMINAL結構

#include <term.h>

int setupterm(char *term, int fd, int *errret);

term: 將終端類型設置為term指向的值,如果為NULL,就使用環(huán)境變量TERM的值

fd:為一個打開的文件描述符,它用于向終端寫數(shù)據(jù),比如 stdout

errret:如果他不是一個空指針,返回值保存在errret中

-1:terminfo數(shù)據(jù)庫不存在

0:terminfo數(shù)據(jù)庫中沒有匹配的數(shù)據(jù)項

1:成功

返回值:其在成功時返回OK,失敗時返回ERR。如果errret被設置為空指針,setupterm函數(shù)會在失敗時輸出一條診斷信息并導致程序直接退出。

第二步:通過調用合適的函數(shù)獲得功能標志

int tigetflag(char *capname);//返回terminfo中的布爾功能標志,失敗返回 -1

int tigetnum(char *capname);//數(shù)值功能標志. -2

char *tigetstr(char *capname);//字符串功能標志 (char *)-1

例:獲得當前終端的大小

1.    setupterm(NULL, fileno(stdout), (int *)0);

2.    nrows = tigetnum("lines");

       ncolumns = tigetnum("cols");

第三步 //如果時帶參數(shù)的字符串功能字,設置參數(shù)

char *tparm(char *cap, long p1, long p2, ..., long p9);//最多可以設置9個參數(shù)

第四步 //將字符串發(fā)送到終端,使用以下函數(shù)可以正確處理終端完成一個操作所需要的延時

int putp(char *const str);//它將控制字符串發(fā)送到標準輸出stdout   OK | ERR

int tputs(char *const str, int affcnt, int (*putfunc)(int));//這是為了不能通過標準輸出stdout訪問終端的情況準備的

affcnt: 表明受這一變化影響的行數(shù),一般為1

putfunc:用于輸出字符串的函數(shù),其參數(shù)和返回值類型必須與putchar函數(shù)相同

其實putp 相當于 tputs(string, 1, putchar);

例:將光標移動到指定位置

1.    cursor = tigetstr("cup");

2.    esc_sequence = tparm(cursor, 5, 30);//第5行,第30列

3.    putp(esc_sequence):


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
亚洲网站一区| 18被视频免费观看视频| 精品久久久久一区二区三区| 国产剧情av在线| 日本一二区视频| 亚洲伊人网在线观看| 精精国产xxxx视频在线| 香蕉视频在线观看www| 青草av在线| 国产免费人人看| 国产精品冒白浆免费视频| 99久久精品免费观看国产| www在线播放| 国产精品一卡二卡三卡| 国产青草视频在线观看视频| 伊人av免费在线观看| 麻豆国产视频| 9999在线视频| 国产美女在线观看| 精品美女在线观看视频在线观看| av网址在线看| 国产人成高清视频观看| 免费日本黄色| 国产二级c片l毛片| 国产美女在线观看| 亚洲成人国产综合| 18激情网站| 国产一区二区影视| 欧美日韩国产亚洲沙发| 国产高清视频在线观看| 国产麻豆一区二区三区精品| 在线天堂av| 中文在线官网天堂| 国产福利免费在线观看| 在线观看免费视频一区二区三区| 国产在线激情视频| 在线视频三级| 国产青青视频| 最近中文字幕mv2018在线高清 | 男人天堂网在线观看| 在线中文字幕视频| 国产精品第八页| 国产一区二区三区美女秒播| 狠狠干五月天| 免费在线你懂的| 精品视频一二三| 亚洲精品视频区| 美女国产在线| 午夜国产福利在线| 国产精品伦一区二区三区级视频频| 午夜不卡视频| 精品国产免费观看一区| 在线三级中文| 蜜桃av网站| 中文字幕不卡| 国产第一页在线| 国产xxxxx| 天天插天天色| 久久国产情侣| 国产精品区一区二| 91麻豆福利| 97最新国自产拍视频在线完整在线看| 国产精品欧美色图| 一级二级三级在线观看| 日本国产在线| 最近中文字幕大全中文字幕免费 | 91精品专区| 午夜在线视频播放| 超碰在线中文| 2019中文字幕视频| 香蕉视频在线看| 久久久久久久久亚洲精品| 国产天堂视频| 伊人网在线观看| 黄色毛片在线| 999国产在线视频| 好吊日视频在线观看| 精品视频麻豆入口| 91av久久| 好男人社区在线视频| 99久久国产视频| 天天爱天天做色综合| 在线激情网站| 国产三级在线播放| heisi视频网在线观看| 五月天丁香在线| 亚洲国产成人综合| 国产三级免费观看| 午夜免费福利在线观看| 色吊丝av中文字幕| 国产女主播在线观看| 欧美日韩一区二区三区视视频| 国产不卡精品一区二区三区| 青青草在线播放| av免费在线免费| 精品一区二区三区免费站| 国产三级在线观看| 国产日韩欧美一区二区三区视频| 国精一区二区三区| 麻豆视频国产| 国产在线激情视频| 欧美日韩不卡中文字幕在线| 亚洲欧美综合乱码精品成人网| 国产欧美日韩第一页| 国产探花在线观看| 国产丝袜在线观看视频| 国产视频二区三区| 国产精品乱码一区二区三区视频| 国产丝袜在线播放| 国产精品第八页| 在线午夜视频| 日本不卡视频一区二区| 黄色网页网址在线免费| 国产九色视频| 国产xxxxx| jlzzjlzz欧美大全| 成人av小说网| 国产欧美日韩精品综合| 国产国产人免费人成免费视频| 国产精品免费视频一区一| 国产精品粉嫩av| 精品视频一区二区观看| 伊人中文字幕在线| 久久香蕉一区| 中文字幕免费中文| 国产黄网站在线观看| 国产成人亚洲综合小说区| 国产黄色片在线观看| 制服丝袜中文字幕在线观看| 亚洲网站一区| 国产一二三区在线| 午夜影院在线免费观看| 高清色视频在线观看| 国产一区二区三区四区尤物| 国产精品视频白浆合集| eeuss影院网站免费观看| 国产免费av高清在线| 国产丝袜护土调教在线视频| 丝袜理论片在线观看| 国产乱xxⅹxx国语对白| 精品176二区| 成人超碰在线| 欧美亚洲天堂| 国产福利小视频在线| 超碰免费在线观看| 2021天堂中文幕一二区在线观| 青青草在线免费观看| 国产精品视频福利一区二区| 亚洲精品aaaa| 伊人福利在线| 999在线视频| 在线观看免费高清完整| 国产一二区在线观看| 欧美性猛交xxxxbbbb| 国产激情视频一区二区| 国产色视频网站| 国产视频一二| 国产三区四区在线观看| 中文字幕在线看精品乱码| 免费看ww视频网站入口| 欧美精品小视频| 女同一区二区免费aⅴ| 日p在线观看| av在线免费播放网站| av在线日韩国产精品| 日本电影在线观看| www.99色.com| 黄色一级视频网站| 丁香视频五月| 国产区在线视频| 18av在线视频| 国产黄网站在线观看| 国产人成网在线播放va免费| 国产极品嫩模在线视频一区| 国产美女视频一区二区二三区| 国产女人伦码一区二区三区不卡| 热99re久久精品精品免费| 免费不卡中文字幕视频| 牛牛热在线视频| 中文字幕在线观看av| 国产成人久久精品77777| 亚洲尤物在线视频| 国产原创在线播放| 国产成人无吗| 久精品在线观看| 精品视频vs精品视频| 久草电影在线| 99热免费在线观看| 国产卡二和卡三的视频| 精灵使的剑舞无删减版在线观看| 麻豆av在线| 999在线视频| 五月婷婷开心综合| 亚洲视频精品在线观看| 五月天天在线| 久青青在线观看视频国产| 69精品视频| 天天爱天天做色综合| av在线1区2区| 国产爆初菊在线观看免费视频网站|