Linux系統使用一個單獨的換行符(\n)來表示一行的結束,而其他的操作系統(MS-DOS)用回車符合換行符兩個字符的組合來標識一行的結束。
輸入輸出的標准模式:所有的輸入都基於行進行處理,在一個輸入行完成前,終端接口負責所有的鍵盤輸入。(用戶程序收到的是整行的字符串,並不會感受到輸錯退格等操作)
非標准模式:程序對用戶的輸入有更大的控制權
重定向輸出:例如將程序重定向到一個文件,此時終端不輸出內容
1 ./menu1 > file //將menu的輸出重定向到文件 2 3 ./menu1 >file 2>file.error //將輸出重定向到file文件 將標准錯誤輸出重定向到file.error文件中
檢測終端是否被重定向
1 #include <unistd.h> 2 3 int isatty(int fd); //fd是文件描述符
檢查當前程序是否輸出到終端
1 if(!isatty(fileno(stdout))) { 2 fprintf(stderr, "You are not a terminal."); 3 }
在一段程序中可以選擇輸出到文件或輸出到終端提示用戶,方法是將設備/dev/tty作為文件打開,對文件進行讀取與輸出,將直接輸出到terminal,而正常的輸出將輸出到重定向的文件
例如:
1 printf("hello"); 2 3 FILE *input,*output; 4 input = fopen("dev/tty",'r'); 5 output = fopen("dev/tty",'w'); 6 fprintf(output,"output to terminal."); //程序的標准輸出被重定向到文件 但是可以通過這種辦法輸入或輸出到terminal
調用本函數時,使用重定向到文件
./menu3 > file
終端驅動程序和通用終端接口(GTI)
Linux提供獨立於用戶程序的控制接口實現與內核終端驅動程序的直接交互,實現如行編輯、緩存控制、回顯等更底層的,更靈活的功能
termios數據結構,被定義在termios.h文件中
終端控制按照模式被分為輸入模式(終端輸入)、輸出模式、控制模式(控制終端的硬件特性)、本地模式(如標准輸入行模式與非標准模式)、特殊控制字符(鍵盤組合按鍵,對於終端的特殊功能,如重啟、中斷等)五種。
通過shell訪問終端模式
將終端誤操作設置為非標准模式時的解決辦法P157
例子:
關閉輸入密碼時的終端回顯功能
1 stty -echo //此時鍵盤輸入將不會顯示到terminal
在密碼輸入完成后,需要打開回顯
stty echo
使用termios結構的密碼程序P159
Linux虛擬控制台&偽終端
一組終端設備能夠共享PC的屏幕,鍵盤和鼠標等
who
ps -e 操作將返回當前登錄進系統的用戶信息,以及在這個虛擬控制台上運行的shell和執行的程序
偽終端與終端唯一的區別是沒有對於的硬件設備,它們可以用來為其他程序提供終端形式的接口。