當我們使用檔案描述符進行操作時,需要操作標準輸入、標準輸出、標準錯誤,可以包含如下標頭檔案:
#include
這個標頭檔案中定義了標準裝置:
/* standard file descriptors. */
#define stdin_fileno 0 /* standard input. */
#define stdout_fileno 1 /* standard output. */
#define stderr_fileno 2 /* standard error output. */
任意乙個程序在啟動時都會初始化對應的標準裝置,他們對應的檔案描述符就是0,1,2。
標準輸出可以使用重定向符號》進行重定向,標準錯誤也可以重定向到標準輸出中。
ls > log.txt 2>&1
示例:
#include #include int main(int argc, char *ar**)
}if (n < 0)
return 0;
}
標準io庫中的檔案操作,涉及到file檔案流格式的標準輸入,標準輸出和標準錯誤:
#include
這個標頭檔案定義了如下的標準裝置:
typedef struct _io_file file;
/* standard streams. */
extern struct _io_file *stdin; /* standard input stream. */
extern struct _io_file *stdout; /* standard output stream. */
extern struct _io_file *stderr; /* standard error output stream. */
因此只要包含了該檔案,我們可以直接使用stdin、stdout,stderr來使用。
示例:
#include int main(int argc, char *ar**)
}if (n < 0)
return 0;
}
我們需要清楚的一點就是,使用標準io庫的讀寫操作,內部實現是包含緩衝區的,所以這裡我們讀10個位元組,如果僅僅輸入8個是不會寫入到標準輸出的,只有當達到10個位元組才會寫入。
$ ./iostream
123456789
fread return n:10
123456789
123456
789fread return n:10
123456
789
標準輸入,標準輸出,標準錯誤輸出緩衝問題
基於流的操作最終會呼叫read或者write函式進行i o操作。為了使程式的執行效率最高,流物件通常會提供緩衝區,以減少呼叫系統i o庫函式的次數。基於流的i o提供以下3種緩衝 以上3種緩衝區分別定義為3個巨集,其定義如表21 1所示。表21 1 緩衝區型別的巨集定義 緩衝區型別 定 義 的 巨集...
標準輸入標準輸出標準錯誤重定向
重定向操作符 描述 將命令輸出寫入到檔案或裝置 如印表機 而不是命令提示符視窗或控制代碼。從檔案而不是從鍵盤或控制代碼讀入命令輸入。將命令輸出新增到檔案末尾而不刪除檔案中已有的資訊。將乙個控制代碼的輸出寫入到另乙個控制代碼的輸入中。從乙個控制代碼讀取輸入並將其寫入到另乙個控制代碼輸出中。從乙個命令中...
Linux標準輸入 標準輸出和標準錯誤重定向
shell會自動為我們開啟和關閉0 1 2這三個檔案描述符,我們不需要顯式地開啟或關閉它們。標準輸入是命令的輸入,預設指向鍵盤 標準輸出是命令的輸出,預設指向螢幕 標準錯誤是命令錯誤資訊的輸出,預設指向螢幕。標準輸入是檔案描述符0。它是命令的輸入,預設是鍵盤,也可以是檔案或其他命令的輸出。標準輸出是...