IO 函數(shù)

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

函數(shù)聲明 說(shuō)明 注意 安全性
int getc(FILE *stream); getc 與 fgetc 幾乎一致花枫,區(qū)別在于 getc 為宏基茵,fgetc 為函數(shù)墙歪,一般來(lái)說(shuō)宏產(chǎn)生較大的代碼频伤,但是避免了函數(shù)調(diào)用的堆棧操作倔韭,所以速度會(huì)比較快术浪,而宏展開(kāi)可能對(duì)其參數(shù)有不止一次的調(diào)用,為了保險(xiǎn)起見(jiàn)不能使用帶有 side effects 的參數(shù)寿酌,由此可見(jiàn)使用 fgetc 比 getc 要安全胰苏。 side effects ??
int getchar(void); 調(diào)用時(shí)如果 stdin 內(nèi)有字符,則取出 stdin 中的第一個(gè)字符返回醇疼;否則阻塞等待用戶輸入硕并,直到用戶輸入 '\n' 或者 ^D (EOF) 停止輸入(flush)法焰,'\n' 會(huì)插入到 stdin 中,EOF 不會(huì)插入到 stdin 中倔毙,若此時(shí) stdin 內(nèi)有字符埃仪,則取出 stdin 中的第一個(gè)字符返回,否則返回 EOF (-1) 陕赃。相當(dāng)于 getc(stdin)卵蛉。 - ?
int fgetc(FILE *stream); 見(jiàn) getc。 - ?
char *gets(char *s); 若 stdin 為空凯正,等待用戶輸入毙玻,直到用戶輸入 '\n' 或 ^D (EOF) 停止輸入(flush),<u>'\n' 會(huì)被換成空字符 '\0'</u>廊散,stdin 的 str 和 '\0' 流入緩沖區(qū) s桑滩,如果 strlen(str) 大于 sizeof(s) 會(huì)破壞程序堆棧導(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'會(huì)插入到 stdin 中胁澳,EOF 不會(huì)插入到 stdin 中,stdin 流入緩沖區(qū) s 的字符數(shù)最多為 size-1 個(gè)米者,自動(dòng)在第 size 個(gè)位置補(bǔ)上 '\0'韭畸,共 size 個(gè)字符。如果 size > sizeof(s)蔓搞,當(dāng) stdin 含有足夠多字符時(shí)會(huì)破壞程序堆棧導(dǎo)致程序崩潰胰丁。所以最好取值 size=sizeof(s),即等于緩沖區(qū)大小喂分。fgets 比 gets 要安全锦庸。 size 不能大于緩沖區(qū)s大小 ??
int putc(int c, FILE *stream); putc 與 fputc 幾乎一致,區(qū)別在于 putc 為宏蒲祈,fputc 為函數(shù)甘萧,一般來(lái)說(shuō)宏產(chǎn)生較大的代碼,但是避免了函數(shù)調(diào)用的堆棧操作梆掸,所以速度會(huì)比較快扬卷,而宏展開(kāi)可能對(duì)其參數(shù)有不止一次的調(diào)用,為了保險(xiǎn)起見(jiàn)不能使用帶有 side effects 的參數(shù)酸钦,由此可見(jiàn)使用 fputc 比 putc 要安全怪得。 side effects ??
int putchar(int c); 相當(dāng)于 putc(c, stdout)。 - ?
int fputc(int c, FILE *stream); 見(jiàn) putc。 - ?
int puts(const char *s); 將字符串 s 寫(xiě)入到 stdout汇恤,<u>'\0' 會(huì)被換成 '\n'并寫(xiě)入</u>。 - ?
int fputs(const char *s, FILE *stream); 將字符串 s 寫(xiě)入到 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ù)組)中河爹,如果格式化字符串長(zhǎng)度大于 sizeof(str) 即緩沖區(qū)大小匠璧,會(huì)破壞程序堆棧導(dǎo)致程序崩潰。 緩沖區(qū)溢出 ?
int snprintf(char *str, size_t size, const char *format, ...); 與 sprintf 類似咸这,但是可以指定 size 從格式化字符串最多取前 size-1 個(gè)字符加一個(gè)空字符 '\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 個(gè)(每個(gè) size 字節(jié)大小)數(shù)據(jù)項(xiàng)存儲(chǔ)到緩沖區(qū) ptr 媳维。如果緩沖區(qū) ptr 不足夠大酿雪,可能會(huì)發(fā)生緩沖區(qū)溢出。如果調(diào)用成功則返回讀取到的數(shù)據(jù)項(xiàng)個(gè)數(shù)侄刽。 size 和 nmemb 的取值大小 ??
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 將緩沖區(qū) ptr 中 nmemb 個(gè) (每個(gè) size 字節(jié)大小)數(shù)據(jù)項(xiàng)寫(xiě)入到 stream指黎。如果調(diào)用成功則返回寫(xiě)入成功的數(shù)據(jù)項(xiàng)個(gè)數(shù)。 - ?

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

函數(shù)聲明 說(shuō)明 注意 安全性
ssize_t read(int fd, void *buf, size_t count); 從文件 fd 中取最多 count 個(gè)字符存放在緩沖區(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 個(gè)字節(jié)寫(xiě)入到文件 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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吓揪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚁鳖,更是在濱河造成了極大的恐慌磺芭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醉箕,死亡現(xiàn)場(chǎng)離奇詭異钾腺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)讥裤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門放棒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人己英,你說(shuō)我怎么就攤上這事间螟。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵厢破,是天一觀的道長(zhǎng)荣瑟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摩泪,這世上最難降的妖魔是什么笆焰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮见坑,結(jié)果婚禮上嚷掠,老公的妹妹穿的比我還像新娘。我一直安慰自己荞驴,他們只是感情好不皆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著熊楼,像睡著了一般霹娄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲫骗,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天项棠,我揣著相機(jī)與錄音,去河邊找鬼挎峦。 笑死香追,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坦胶。 我是一名探鬼主播透典,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顿苇!你這毒婦竟也來(lái)了峭咒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纪岁,失蹤者是張志新(化名)和其女友劉穎凑队,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體幔翰,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漩氨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遗增。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫惊。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖做修,靈堂內(nèi)的尸體忽然破棺而出霍狰,到底是詐尸還是另有隱情抡草,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布蔗坯,位于F島的核電站康震,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宾濒。R本人自食惡果不足惜签杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鼎兽。 院中可真熱鬧,春花似錦铣除、人聲如沸谚咬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)择卦。三九已至,卻和暖如春郎嫁,著一層夾襖步出監(jiān)牢的瞬間秉继,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工泽铛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尚辑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓盔腔,卻偏偏與公主長(zhǎng)得像杠茬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弛随,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • C/C++輸入輸出流總結(jié) 前兩天寫(xiě)C++實(shí)習(xí)作業(yè)瓢喉,突然發(fā)現(xiàn)I/O是那么的陌生,打了好長(zhǎng)時(shí)間的文件都沒(méi)有打開(kāi)舀透,今天終...
    LuckTime閱讀 1,733評(píng)論 0 6
  • 標(biāo)準(zhǔn)c++中string類函數(shù)介紹 注意不是CString 之所以拋棄char*的字符串而選用C++標(biāo)準(zhǔn)程序庫(kù)中的...
    杰倫哎呦哎呦閱讀 1,321評(píng)論 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,466評(píng)論 0 0
  • 一月的最后一天走贪。 一直在拖延,磨蹭惑芭,反反復(fù)復(fù)厉斟,曲曲折折。 一天蜿蜒的河强衡,曲曲折折擦秽,沒(méi)有盡頭…… 我的畫(huà)筆擱置了,推...
    聽(tīng)雷雷說(shuō)閱讀 174評(píng)論 0 0
  • 01 天行者盧克死了。 他們說(shuō)感挥,舊的那些都要過(guò)去缩搅,讓新的篇章開(kāi)始〈ビ祝可是硼瓣,新的篇章里,還是被憤怒置谦、孤獨(dú)堂鲤、絕望喂養(yǎng)了的...
    雪梨和雪柔閱讀 480評(píng)論 0 0