我正在尋找從stdin/stdout讀取/寫入數據的各種方法。目前我知道關於scanf/printf,getchar/putchar和gets/puts。有沒有其他的方法來做到這一點?另外我很有興趣知道哪一個在存儲器和空間方面最有效率。C中的I/O方法
由於提前
我正在尋找從stdin/stdout讀取/寫入數據的各種方法。目前我知道關於scanf/printf,getchar/putchar和gets/puts。有沒有其他的方法來做到這一點?另外我很有興趣知道哪一個在存儲器和空間方面最有效率。C中的I/O方法
由於提前
標準輸入輸出的設計是相當無論您喜歡以何種方式閱讀數據,效率都很高。如果你需要逐個字符的讀寫操作,它們通常擴展到只訪問緩衝區的宏,除非它是滿的/空的。對於逐行文本io,請使用puts
/fputs
和fgets
。 (但是從不使用gets
,因爲沒有辦法控制它將讀取多少字節!)printf
系列(例如fprintf
)當然是非常有用的文本,因爲它允許您在寫入之前跳過構建內存中的臨時緩衝區並因此讓你避免考慮所有的內存分配,溢出等問題)。 fscanf
往往不太有用,但主要是因爲它很難使用。如果你學習fscanf
的文檔,並學習如何使用%[
,%n
和數字說明符,它可以非常強大!
對於大塊文本(例如,將整個文件加載到內存中)或二進制數據,還可以使用fread
和fwrite
函數。您應該始終爲size參數傳遞1以及爲count參數讀取/寫入的字節數;否則不可能從返回值中知道成功讀取或寫入了多少內容。
如果你是一個合理的POSIX-like系統(相當多的東西),你還可以使用較低級別的IO功能open
,read
,write
,等等,這些都是C標準,但部分不一部分POSIX和非POSIX系統通常提供相同的功能,但可能具有略微不同的行爲(例如,文件描述符可能不會按照POSIX要求的順序編號0,1,2,...)。
fgets()
fputs()
read()
write()
和別人,細節可以在這裏找到:http://www.cplusplus.com/reference/clibrary/cstdio/
根據你的時間的問題看看這個:http://en.wikipedia.org/wiki/I/O_bound
'read'和'write'不是C的一部分,而是POSIX函數(也存在於大多數其他系統上,但具有不同的行爲)。 – 2010-07-07 11:27:28
如果您正在尋找直接模式類型的東西不要忘了Curses(更適用於* NIX的一面,而且在Windows上使用)
讀一本書,比如C編程語言。而I/O操作通常不受CPU限制。 – 2010-07-07 11:18:44