1. 程式人生 > >淺析C標準I/O庫

淺析C標準I/O庫

   1: void streaming_property(FILE* file)
<!--CRLF-->
   2: {
<!--CRLF-->
   3: 
<!--CRLF-->
   4:         if(file->_flags & _IO_UNBUFFERED) 
<!--CRLF-->
   5:                 printf("unbuffered/n");
<!--CRLF-->
   6:         else if(file->_flags & _IO_LINE_BUF)
<!--CRLF-->
   7:                 printf("line-buffered/n");
<!--CRLF-->
   8:         else
<!--CRLF-->
   9:                 printf("fully-buffered/n");
<!--CRLF-->
  10: 
<!--CRLF-->
  11:         printf("buffer size is %d/n", file->_IO_buf_end - 
<!--CRLF-->
  12:
file->_IO_buf_base);
<!--CRLF-->
  13: 
<!--CRLF-->
  14:         printf("discriptor is %d/n/n", fileno(file)); 
<!--CRLF-->
  15: }
<!--CRLF-->
  16: 
<!--CRLF-->
  17: 
<!--CRLF-->
  18: int main(int argc, char** argv)
<!--CRLF-->
  19:
{
<!--CRLF-->
  20:         printf("stdin is ");
<!--CRLF-->
  21:         streaming_property(stdin);
<!--CRLF-->
  22: 
<!--CRLF-->
  23:         cout << "Change BUF" << endl << endl;
<!--CRLF-->
  24: 
<!--CRLF-->
  25:         //修改stdin為全緩衝區,緩衝區大小為1024
<!--CRLF-->
  26:         char buf[1024];
<!--CRLF-->
  27:         setvbuf(stdin, buf, _IOFBF, 1024);
<!--CRLF-->
  28: 
<!--CRLF-->
  29:         printf("stdin is ");
<!--CRLF-->
  30:         streaming_property(stdin);
<!--CRLF-->
  31: 
<!--CRLF-->
  32: 
<!--CRLF-->
  33:         char c ; 
<!--CRLF-->
  34: 
<!--CRLF-->
  35:         int x = 0;
<!--CRLF-->
  36: 
<!--CRLF-->
  37:         //輸入為q時,退出
<!--CRLF-->
  38:         while((c = getc(stdin)) != 'q')
<!--CRLF-->
  39:         {
<!--CRLF-->
  40: 
<!--CRLF-->
  41:                 switch(c)
<!--CRLF-->
  42:                 {
<!--CRLF-->
  43:                 case 'A':
<!--CRLF-->
  44:                         x++;
<!--CRLF-->
  45:                         break;
<!--CRLF-->
  46:                 case 'B':
<!--CRLF-->
  47:                         cout << endl << "x = " <<  x << endl;;
<!--CRLF-->
  48:                         break;
<!--CRLF-->
  49:                 case 'C':
<!--CRLF-->
  50:                         x--;
<!--CRLF-->
  51:                         break;
<!--CRLF-->
  52:                 default:
<!--CRLF-->
  53:                         cout << "please input A/B/C/q" << endl;
<!--CRLF-->
  54:                 }
<!--CRLF-->
  55:         }
<!--CRLF-->
  56: 
<!--CRLF-->
  57:         return 0;
<!--CRLF-->
  58: }
<!--CRLF-->
  59: 
<!--CRLF-->
  60: 輸出:
<!--CRLF-->
  61: $ ./bin/test 
<!--CRLF-->
  62: stdin is fully-buffered
<!--CRLF-->
  63: buffer size is 0
<!--CRLF-->
  64: discriptor is 0
<!--CRLF-->
  65: 
<!--CRLF-->
  66: Change BUF
<!--CRLF-->
  67: 
<!--CRLF-->
  68: stdin is fully-buffered
<!--CRLF-->
  69: buffer size is 1024
<!--CRLF-->
  70: discriptor is 0
<!--CRLF-->
  71: 
<!--CRLF-->
  72: AAAAAAAAAAAAAAAAAAAAABqqqqqqqqqqqqqqqqqqqqqq
<!--CRLF-->
  73: 
<!--CRLF-->
  74: x = 21
<!--CRLF-->
  75: $
<!--CRLF-->

相關推薦

淺析C標準I/O

1: void streaming_property(FILE* file) <!--CRLF--> 2: { <!--CRLF--> 3: <!--CRLF--> 4: if(file->_flags & _IO_

C++標準I/O:iostream, fstream, sstringstream

sso www c const ams 生效 系列 linux 引用 binary 在寫代碼的過程中。我們最常做的事就是io操作,不管是對控制臺,還是文件。但一段時間不寫代碼就忘了,這裏理一下C++標準I/O庫的詳細類和操作。 C++的標準I/O庫包含我們常常使用的io

C 標準I/O粗略實現

介紹 功能 問題: 關系 請求 頻繁 determine 不出 tin 本文同時發表在 https://github.com/zhangyachen/zhangyachen.github.io/issues/123 寫一下fopen/getc/putc等C庫的粗略實現,參考

C++標準I/O

流介紹 標準I/O類的標頭檔案    <iostream>  包含istream、ostream、iostream這三個類。其中,iostream由istream和ostream派生而來。

Unix環境高級編程(三)標準I/O

buffer 文件創建 fop read 通信通道 種類 目的 lose com   標準I/O庫是ISO C的標準,在很多操作系統上面都實現。Unix文件I/O函數都是針對文件描述符的,當打開一個文件的時候,返回該文件描述符用於後續的I/O操作。而對於標準I/O庫,操作

APUE第5章 標準I/O

1、概述 標準I/O庫處理很多細節,如緩衝區分配、以優化的塊長度執行I/O等。這些處理使使用者不必擔心如何選擇使用正確的長度。本章深入瞭解I/O庫函式的操作。 2、流和FILE物件 對於所有I/O函式(見第3章)都圍繞檔案描述符的。當開啟一個檔案時,即返回一個檔案描述符

標準I/O

tel 下一個 相關 chat 寫入 使用 進制 set lose 設置流的定向: #include <stdio.h> #include <wchar.h> // 流的定向決定了所讀、寫的字符是單字節(字節定向)還是多字節的(寬定向) // 若

Unix/Linux程式設計-標準I/O

標準I/O庫 2.1 標準輸入、標準輸出和標準錯誤 程序中預定義了這3個流,可以自動地被程序呼叫。這些流引用的檔案與檔案描述符中的STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO所引用的相同。這3個標準I/O流通過預定義檔案指標stdin、stdou

【APUE】標準I/O

本文章說明標準I/O庫1.流和FILE物件 對於檔案IO都是針對於檔案描述符的,但是對於標準I/O,則是針對於流進行的 當用標準I/O庫開啟一個檔案的時候,我們已使一個流和一個檔案相關聯 對於ASCII字符集,一個字元用一個位元組表示,對於國際字元,一個字元可用多個位元組表示 標準I/O檔案流可用於單

Chapter5-標準I/O(補充)-「APUE讀書筆記」

實現 每個標準I/O流都有一個相關聯的檔案描述符,可以用fileno函式來獲取。 #include<stdio.h> int    fileno(FILE*  fp);           //POSIX支援的擴充套件,函式dup和fcntl需要此函式 one

5.9 標準I/O_二進位制I/O

    下列兩個函式執行二進位制I/O操作: #include <stdio.h> size_t fread(void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp); size_t fwri

UNIX環境高階程式設計學習之路(三)----標準I/O

#include <stdio.h> #include <wchar.h> int fwide(FILE *fp, int mode); 返回值:若流是寬定向的,返回 正值;若流是位元組定向的,返回負值;若流是未定向的,返回0;</pre></div><

標準I/O(五)

前言 UNIX一切皆檔案,掌握檔案的操作尤其重要。以下的內容主要是apue上面第五章內容,介紹了標準I/O庫的一些內容。 流和FILE物件 標準I/O庫,他們的操作都是圍繞流進行的 字元分為單位元組和多位元組,流的定向決定了是所讀、寫的字元是單位

標準I/O 筆記

標準I/O庫 1.流和FILE物件 a) ASCII字符集:一個字元用一個位元組表示 b) 國際字元:一個字元可以用多個位元組表示 c) 標準I/O檔案流可以用於單位元組或者多位元組字符集 2.流定向 a) 決定所讀、寫的字元是單位元組或者是多位元組 b) 流最初建立時無

第五章 標準I/O

本章講述的是標準I/O庫的很多細節,如緩衝區的分配、以優化的塊長度執行I/O等,因為有這些處理,讓我們不必擔心如何選擇正確的塊長度。 5.2 流和FILE物件 1.流定向決定了所讀、寫的字元是單位元組還是多位元組。當一個流最初被建立時,它並沒有定向。如

C++標準I/0】錯誤:runtime_error was not declared

# 編譯出現:runtime_error was not declared #include <iostream> //#include <stdexcept> //runtime_error using namespace std; std

C primier plus 第十三章 13.2標準I/O

首先,關於main(int argc,char *argv[ ])。參考百度百科中的解釋。 https://baike.baidu.com/item/argc%20argv/10826112?fr=aladdin 1. argc的值是命令列引數的個數 什麼是命令列引數? 在命令列下呼

高速掌握Lua 5.3 —— I/O (1)

跳過 控制 ont haml end {} simple table 最大 Q:什麽是”Simple Model”? A:全部的文件操作都基於一個默認的輸入文件和一個默認的輸出文件。這就意味著同一時間對於輸入和輸出來說,僅僅可操作一個文件(默認的文件)

標準I/O讀寫文件

sizeof linux 文件 文件的 main 方式 次數 col tdi 一、函數原型   1、FILE *fopen(const char *path, const char *mode);     path:要打開文件路徑及文件名;     mode: r 打開只

標準I/O及管道的使用用法

管道 標準i/o 程序:指令+數據 讀入數據 :Input 輸出數據 :Output Linux給程序提供的三種I/O設備 標準輸入,-O 默認接受來自鍵盤的輸入 標準輸出,-1 默認輸出到終端窗口 標準錯誤,-2 默認輸出到終端窗口> 文件內