IO 函數(shù)

C 語言標(biāo)準(zhǔn)庫函數(shù)

函數(shù)聲明 說明 注意 安全性
int getc(FILE *stream); getc 與 fgetc 幾乎一致,區(qū)別在于 getc 為宏,fgetc 為函數(shù),一般來說宏產(chǎn)生較大的代碼,但是避免了函數(shù)調(diào)用的堆棧操作,所以速度會比較快,而宏展開可能對其參數(shù)有不止一次的調(diào)用,為了保險起見不能使用帶有 side effects 的參數(shù),由此可見使用 fgetc 比 getc 要安全。 side effects ??
int getchar(void); 調(diào)用時如果 stdin 內(nèi)有字符,則取出 stdin 中的第一個字符返回;否則阻塞等待用戶輸入,直到用戶輸入 '\n' 或者 ^D (EOF) 停止輸入(flush),'\n' 會插入到 stdin 中,EOF 不會插入到 stdin 中,若此時 stdin 內(nèi)有字符,則取出 stdin 中的第一個字符返回,否則返回 EOF (-1) 。相當(dāng)于 getc(stdin)。 - ?
int fgetc(FILE *stream); 見 getc。 - ?
char *gets(char *s); 若 stdin 為空,等待用戶輸入,直到用戶輸入 '\n' 或 ^D (EOF) 停止輸入(flush),<u>'\n' 會被換成空字符 '\0'</u>,stdin 的 str 和 '\0' 流入緩沖區(qū) s,如果 strlen(str) 大于 sizeof(s) 會破壞程序堆棧導(dǎo)致程序崩潰,如果調(diào)用成功則返回緩沖區(qū)指針 s。Never use this function! 緩沖區(qū)溢出 ?
char *fgets(char *s, int size, FILE *stream); 若 stdin 為空,等待用戶輸入,直到用戶輸入 '\n' 或 ^D (EOF) 停止輸入(flush),'\n'會插入到 stdin 中,EOF 不會插入到 stdin 中,stdin 流入緩沖區(qū) s 的字符數(shù)最多為 size-1 個,自動在第 size 個位置補(bǔ)上 '\0',共 size 個字符。如果 size > sizeof(s),當(dāng) stdin 含有足夠多字符時會破壞程序堆棧導(dǎo)致程序崩潰。所以最好取值 size=sizeof(s),即等于緩沖區(qū)大小。fgets 比 gets 要安全。 size 不能大于緩沖區(qū)s大小 ??
int putc(int c, FILE *stream); putc 與 fputc 幾乎一致,區(qū)別在于 putc 為宏,fputc 為函數(shù),一般來說宏產(chǎn)生較大的代碼,但是避免了函數(shù)調(diào)用的堆棧操作,所以速度會比較快,而宏展開可能對其參數(shù)有不止一次的調(diào)用,為了保險起見不能使用帶有 side effects 的參數(shù),由此可見使用 fputc 比 putc 要安全。 side effects ??
int putchar(int c); 相當(dāng)于 putc(c, stdout)。 - ?
int fputc(int c, FILE *stream); 見 putc。 - ?
int puts(const char *s); 將字符串 s 寫入到 stdout,<u>'\0' 會被換成 '\n'并寫入</u>。 - ?
int fputs(const char *s, FILE *stream); 將字符串 s 寫入到 stream。 - ?
int scanf(const char *format, ...); 從 stdin 格式化讀取數(shù)據(jù)。 - ?
int fscanf(FILE *stream, const char *format, ...); 從 stream 格式化讀取數(shù)據(jù)。 - ?
int sscanf(const char *str, const char *format, ...); 從字符串?dāng)?shù)組 str 格式化讀取數(shù)據(jù)。 - ?
int printf(const char *format, ...); 格式化字符串輸出到 stdout。 - ?
int fprintf(FILE *stream, const char *format, ...); 格式化字符串輸出到 stream。 - ?
int sprintf(char *str, const char *format, ...); 格式化字符串復(fù)制到緩沖區(qū) str(字符串?dāng)?shù)組)中,如果格式化字符串長度大于 sizeof(str) 即緩沖區(qū)大小,會破壞程序堆棧導(dǎo)致程序崩潰。 緩沖區(qū)溢出 ?
int snprintf(char *str, size_t size, const char *format, ...); 與 sprintf 類似,但是可以指定 size 從格式化字符串最多取前 size-1 個字符加一個空字符 '\0' 復(fù)制到緩沖區(qū) str。應(yīng)取值 size = sizeof(str)。 size 不能大于緩沖區(qū)str的大小 ??
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 從 stream 讀取最多 nmemb 個(每個 size 字節(jié)大小)數(shù)據(jù)項存儲到緩沖區(qū) ptr 。如果緩沖區(qū) ptr 不足夠大,可能會發(fā)生緩沖區(qū)溢出。如果調(diào)用成功則返回讀取到的數(shù)據(jù)項個數(shù)。 size 和 nmemb 的取值大小 ??
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 將緩沖區(qū) ptr 中 nmemb 個 (每個 size 字節(jié)大小)數(shù)據(jù)項寫入到 stream。如果調(diào)用成功則返回寫入成功的數(shù)據(jù)項個數(shù)。 - ?

Linux 系統(tǒng)調(diào)用

函數(shù)聲明 說明 注意 安全性
ssize_t read(int fd, void *buf, size_t count); 從文件 fd 中取最多 count 個字符存放在緩沖區(qū) buf 中。該函數(shù)的返回值為讀取到的字節(jié)數(shù)。如果 count > sizeof(buf) 可能發(fā)生緩沖區(qū)溢出。 cout 的取值大小 ??
ssize_t write(int fd, const void *buf, size_t count); 將緩沖區(qū) buf 中 count 個字節(jié)寫入到文件 fd。 - ?

更新:
fgets: On linux Ctrl-D only works when the buffer is already empty otherwise it just flushes it. Therefore unless you have pressed enter without any characters after that, you will have to press Ctrl-D twice.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時間的文件都沒有打開,今天終...
    LuckTime閱讀 1,807評論 0 6
  • 標(biāo)準(zhǔn)c++中string類函數(shù)介紹 注意不是CString 之所以拋棄char*的字符串而選用C++標(biāo)準(zhǔn)程序庫中的...
    杰倫哎呦哎呦閱讀 1,378評論 0 8
  • 數(shù)據(jù)的IO和復(fù)用 網(wǎng)絡(luò)數(shù)據(jù)能夠正常的到達(dá)用戶,并被用戶接受網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)哪康摹>W(wǎng)絡(luò)數(shù)據(jù)的接受以及發(fā)送有多種方案,例...
    VD2012閱讀 1,530評論 0 0
  • 一月的最后一天。 一直在拖延,磨蹭,反反復(fù)復(fù),曲曲折折。 一天蜿蜒的河,曲曲折折,沒有盡頭…… 我的畫筆擱置了,推...
    聽雷雷說閱讀 211評論 0 0
  • 01 天行者盧克死了。 他們說,舊的那些都要過去,讓新的篇章開始。可是,新的篇章里,還是被憤怒、孤獨、絕望喂養(yǎng)了的...
    雪梨和雪柔閱讀 539評論 0 0

友情鏈接更多精彩內(nèi)容