標準輸入,標準輸出和標準錯誤

2021-09-12 23:02:55 字數 1450 閱讀 9503

當我們使用檔案描述符進行操作時,需要操作標準輸入、標準輸出、標準錯誤,可以包含如下標頭檔案:

#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。它是命令的輸入,預設是鍵盤,也可以是檔案或其他命令的輸出。標準輸出是...