C語言中的輸入輸出函數(shù)

一.錯誤報告1.perror()函數(shù)是一種簡單、統(tǒng)一的方式報告錯誤。ansi c?函數(shù)庫的許多函數(shù)調用操作系統(tǒng)來完成某些任務,I/O函數(shù)尤其如此。任何時候,當操作系統(tǒng)根據(jù)要求執(zhí)行一些任何的時候,都存在失敗的可能。標準庫函數(shù)在一個外部整型變量errno(在errno.h中定義)中保存錯誤代碼之后把這個信息傳遞給用戶程序,提示操作失敗的準確原因。?
2.perror()函數(shù)的原型:?
#include<stdio.h>?
void perror(charconst *message);?
如果message不是NULL并且指向一個非空的字符串,perror函數(shù)就打印出這個字符串,后面跟一個分號和一個空格,然后打印出一條用于解釋errno當前錯誤代碼的信息。?
3.perrno函數(shù)的最大優(yōu)點是容易使用。良好的編程實踐要求任何可能產生錯誤的操作讀應該在執(zhí)行之后進行檢查,確定它是否成功執(zhí)行。?
說明:?
只有當一個庫函數(shù)失敗時,errno才會被設置。當函數(shù)成功執(zhí)行時,errno的值不會被需改。因此,不能通過測試errno的值來判斷是否有錯誤發(fā)生。所以只有當被調用的函數(shù)提示有錯誤發(fā)生時檢查errno的值才有意義。?
二.終止執(zhí)行1.終止執(zhí)行的函數(shù)是exit,它用于終止一個程序的執(zhí)行。?
2.它的原型為:?
#include<stdlib.h>?
void exit(intstatus);?
3.status參數(shù)返回給操作系統(tǒng),用于提示程序是否正常完成。?
這個值和main()函數(shù)返回的整型狀態(tài)值相同。預定義符號EXIT_SUCCESS和EXIT__FAILURE分別提示程序的終止是成功還是失敗。?
4.當程序發(fā)現(xiàn)錯誤情況使它無法繼續(xù)執(zhí)行下去時,可以使用該函數(shù)。我們經常會在調用perrno之后再調用exit終止程序?
5.該函數(shù)沒有返回值。當exit函數(shù)結束之后,程序已經消失。?
三.文本流1.流分為兩種類型,文本(text)流和二進制流(binary)流。?
2.文本流的有些特性在不同的系統(tǒng)中可能不同。其中之一就是文本的行的最大長度。 標準規(guī)定至少允許254個字符。另一個可能不同的特性是文本行的結束方式。?
1>在MS-DOS系統(tǒng)中,文本行預定以一個回車符和一個換行符結尾。?
2>在UNIX系統(tǒng)中只使用一個換行符結尾。?
3.標準文本行定義為零個或多個字符,后面跟一個表示結束的換行符。?
四.二進制流1.二進制流中的字節(jié)將完全根據(jù)程序編寫它們的形式寫入到文件或設備中,而且完全根據(jù)它們從文件或設備讀取的形式讀入到程序中。?
2.這種類型的流適用于非文本數(shù)據(jù),但是如果I/O函數(shù)修改文本文件的行末字符,也可以把它用于文本文件。?
五文件1.stdio.h所包含的聲明之一就是FILE結構。FILE是一個數(shù)據(jù)結構,用于訪問一個流。?
2.如果同時激活了幾個流,每個流都有一個相應的FILE與它關聯(lián)。為了在流上執(zhí)行一些操作,可以調用一些合適的函數(shù),并向它們傳遞一個與這個流關聯(lián)的FILE參數(shù)。?
3.對于每個ANSI C程序,運行時系統(tǒng)必須提供至少三個流:?
1>標準輸入(standard input):標準輸入是缺省情況下輸入的來源。?
2>標準輸出(standard output)?:標準輸出是缺省的輸出設置?
3>標準錯誤(standard error):就是錯誤寫入的地方。Perror函數(shù)把它的輸出也寫到這個地方。在許多系統(tǒng)中,標準輸出和標準錯誤在缺省情況下相同的。但是,為錯誤信息準備一個不同的流以為著,即使標準輸出重定向到其他地方,錯誤信息仍將出現(xiàn)在屏幕或其他缺省的輸出設備上。?
這些流的名字分別是stdin、stout和stderr。它們都是一個指向FILE結構的指針。?
4.許多操作系統(tǒng)允許用戶在程序執(zhí)行時修改缺省的標準輸入和輸出設備.?
例如:?
MS-DOS和UNIX系統(tǒng)都支持用下面的方法進行輸入/輸出重定向:program< data >answer?
當該程序執(zhí)行時,它將從文件data?而不是鍵盤作為標準輸入進行讀取,它將把標準輸出寫入到文件answer而不是屏幕上。?
5.程序為必須同時活動狀態(tài)的每個文件聲明一個指針變量,其類型為FILE *。這個指針指向這個FILE結構,當它處于活動狀態(tài)時由流使用。?
6.流通過調用fopen函數(shù)打開。為了打開一個流,你必須指定需要訪問的文件或設備以及它們的訪問方式(例如:讀、寫或者既讀又寫)。fopen()和操作系統(tǒng)驗證文件或設備確實存在并初始化FILE結構。然后,根據(jù)需要對該文件進行讀取或寫入。最后,調用flose函數(shù)關閉流。關閉一個流可以防止與它相關聯(lián)的文件被再次訪問,保證任何存儲于緩沖區(qū)的數(shù)據(jù)被正確地寫到文件中,并且釋放FILE結構使它可以用于另外的文件。?
7.I/O函數(shù)以三種基本的形式處理數(shù)據(jù):單個字符、文本行和二進制數(shù)據(jù)。對于每種形式,都有一組特定的函數(shù)對它們進行處理。?
8.打開流?
1>fopen()函數(shù)打開一個特定的文件,并把一個流和這個文件相關聯(lián)。原型如下:?
FILE*fopen(char const *name,charconst *mode);?
了解更多網絡知識關注:http://www.vecloud.com/