C标准I/O缓冲区:全缓冲和行缓冲
ISO C標準I/O提供了全緩沖和行緩沖
全緩沖:在進行I/O操作時,只有當I/O緩沖區被填滿時,才進行真正的I/O操作。所以對于全緩沖的緩沖區可由標準I/O例程自動刷新,即當緩沖區填滿時,還有一種方法就是調用函數fflush進行刷新。
行緩沖:在I/O操作時,輸入輸出遇到換行符時進行,進行真正的I/O操作。對于行緩沖,標準I/O每一行緩沖區的長度是固定的,所以只要填滿了緩沖區,即使沒有遇到換行符,也換刷新緩沖區。
當然標準I/O還提供了不帶緩沖的類型,就是不對字符進行緩沖操作。
那么全緩沖和行緩沖都用在I/O操作的哪些地方呢。
ISO C要求:
- 當且僅當標準輸入和輸出不涉及交互式設備(終端設備)時,它們才是全緩沖。
- 標準出錯不是全緩沖。
但是這并沒有告訴我們當涉及到交互式設備時,標準輸入輸出是行緩沖還是不帶緩沖,以及標準出錯時行緩沖還是不帶緩沖。很多系統(FreeBSD,Linux,Mac OS,Solaris)默認使用下面類型緩沖:
- 如果標準輸入輸出涉及終端設備,則它們是行緩沖,否則是全緩沖。
- 標準出錯不帶緩沖。
我們都知道shell為每個進程都定義了三個文件描述符:0,1,2。這三個文件描述符分別與進程的標準輸入,標準輸出和標準出錯輸出相關聯。在unistd.h頭文件中這三個常量分別替換成STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO符號。在ISO C中分別對應與stdin,stdout,stderr。
轉載于:https://www.cnblogs.com/sir-jarvis/p/4075850.html
總結
以上是生活随笔為你收集整理的C标准I/O缓冲区:全缓冲和行缓冲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 税后是含税还是不含税
- 下一篇: (原)Eclipse中将JNI生成的so