<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>
初看這段代碼時,感覺非常奇怪,沒有看到任何打開文件的函數,也沒有任何關閉文件的函數,就可以直接操作讀取和寫入。難道文件是可以自動打開的嗎?從linux系統調用API裡知道是不可能啊!這時,反復查看輸入的命令行,如下:
rgb2565 –rle <xiyang.raw >initlogo.rle
從這個命令行裡,看到一些眉目瞭吧?兩個文件為什麼要添加像個括號的東西呢?是啊,這兩個括號是有特別用途的,對於我剛從WINDOWS轉過的程序員來說,是比較奇怪,後來仔細地查看shell調用,詳細介紹如下:
標準輸入
標準輸入是文件描述符0.它是命令的輸入,缺省是鍵盤,也可以是文件或其它的命令輸出
標準輸出
標準輸出是文件描述符1.它是命令的輸出,缺省是屏幕,也可以是文件
標準錯誤
標準錯誤是文件件描述符2。它是命令錯誤碼率的輸出,缺省是屏幕,同樣也可以是文件.
重定向操作符描述
> 將命令輸出寫入到文件或設備(如打印機),而不是命令提示符窗口或句柄。
< 從文件而不是從鍵盤或句柄讀入命令輸入。
>> 將命令輸出添加到文件末尾而不刪除文件中已有的信息。
>& 將一個句柄的輸出寫入到另一個句柄的輸入中。
<& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
| 從一個命令中讀取輸出並將其寫入另一個命令的輸入中。也稱作管道。
常用文件重定向命令
Shell代碼
command >filename 把標準輸出重定向到一個新文件中
command >>filename 把標準輸出重定向到一個文件中(追加)
command 1>fielname 把標準輸出重定向到一個文件中
command >filename 2>&1 把標準輸出和標準錯誤一起重定向到一個文件中
command 2 > filename 把標準錯誤重定向到一個文件中
command 2 >> filename 把標準輸出重定向到一個文件中(追加)
command >> filename 2>&1 把標準輸出和標準錯誤一起重定向到一個文件中(追加)
command < filename >filename2 把command命令以filename文件作為標準輸入,以filename文件作為標準輸出
command < filename 把command命令以filename文件作為標準輸入
command << delimiter 把從標準輸入中讀入,直至遇到delimiter分界符
command <&m 把把文件描述符m作為標準輸入
command >&m 把把標準輸出重定向到文件描述符m中
從上面詳細說明中,就可以知道這個命令行特別地方瞭。第二個參數<xiyang.raw就是把文件xiyang.raw重定向為標準輸入,也就是原始格式的數據作為輸入文件打開。
第三個參數>initlogo.rle,就是作為標準輸出文件打開瞭。
通過這段程序,可以瞭解寫程序的人對linux很熟悉,並且利用到瞭極致,連文件的打開和關閉的事情都省瞭,極其高效