linux系統編程-- 標準IO

標準IO:

標準IO在應用層:比文件IO高級一點,在windows也可以用
標準IO指C語言中提供的標準輸入輸出庫文件所包含的函數。
即stdio.h文件中聲明的函數,都是標準輸入輸出函數。
printf scanf
sprintf sscanf
fprintf fscanf

putchar getchar
puts gets
putc getc
fputs fgets

以終端爲操作對象的標準IO函數:
printf();

函數原型:int printf(const char *format, …);
功能:向終端輸出一個字符串。
優點:輸出格式可以自定義。

scanf();

函數原型:int scanf(const char *format, …);
功能:從終端獲取指定格式的數據,保存到一個變量空間中
優點:獲取輸入數據的格式可以指定。
缺點:如果從終端獲取字符串,遇到空格結束。

puts();

函數原型:int puts(const char *s);
功能:輸出一個字符串。 <僅僅只能輸出字符串內容>
特點:自動在字符串末尾添加換行符

gets();

函數原型:char* gets(char *s);
功能:從終端獲取一個字符串。
特點:獲取字符串時,遇到換行纔會結束。
獲取字符串時,會一直獲取,容易導致緩存區溢出。

scanf()和gets()在終端獲取字符串時,特性對比:
 1)scanf()函數從終端獲取字符串,遇到空格結束。
 2)gets()函數從終端獲取字符串時,遇到換行纔會結束。
 3)scanf()函數從終端獲取字符串時,遇到換行結束獲取,不會讀取換行符,換行符依舊保留在輸入緩存區。
 4)gets()函數從終端獲取字符串時,遇到換行結束獲取,最後的換行符也會讀取到。讀取到之後,丟棄換行符

以字符串爲操作對象的標準IO函數:
sprintf();

函數原型:int sprintf(char *str, const char *format, …);
 功能:把一個字符串輸出到str指向的緩存區中。
 用途:sprintf()主要用於字符串拼接。
 例: sprintf(buf, “%s–>%s/%s %d %f is %s”, “hello”, “/dev/”, “a.txt”, …);

例子:將兩個數值拼接到一個字符串
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char tem[128]={0};
    //溫溼度
    int temp=25;
    int hum=60;

    sprintf(tem,"現在的溫溼度分別是:,溫度%d,溼度%d %%\r\n",temp,hum);

    printf("%s\n", tem);

    return 0;
}

輸出結果:現在的溫溼度分別是:,溫度25 ,溼度60 %

sscanf();

函數原型:int sscanf(const char *str, const char *format, …);
 功能:從str字符串中獲取數據,根據指定格式進行獲取,保存到變量空間中
 <以字符串作爲輸入來源>
 用途:數據類型轉換。 把字符串轉換爲整型/浮點型/字符型數據

以文件爲操作對象的標準IO函數:
fprintf();

函數原型:int fprintf(FILE *stream, const char *format, …);
功能:把一個字符串輸出到stream指向文件中。對文件進行寫操作!

fscanf();

  函數原型:int fscanf(FILE *stream, const char *format, …);
  功能:從stream指向的文件中獲取數據,經過格式轉換之後,保存到變量空間中。讀操作!
<以文件作爲數據輸入來源>

fputs();

  函數原型:int fputs(const char *s, FILE *stream);
  功能:把字符串s輸出到stream指向的文件中。 對文件的寫操作
<輸出重定向到文件中>

fgets();

  函數原型:char * fgets(char *s, int size, FILE *stream);
  功能:從stream指向文件中獲取數據,最大獲取size-1個,把獲取到的數據保存在s指向的緩存區。
<對文件的讀操作>
形參:
  s:存放獲取到數據的緩存區
  size:最大獲取數據的字節個數-1。
  stream:數據獲取的來源。 <文件/終端>
 返回值:
  成功:獲取到的字符串首地址
  失敗:NULL

對文件寫操作 對文件讀操作
fpirntf(); fscanf();
fputs(); fgets();

重要!標準IO中的文件流指針

文件流指針:FILE*

  在標準IO對文件進行操作的時候,使用文件名稱是不能準確指定一個文件,要用文件流指針。
  這裏使用文件流指針去指定要操作的文件空間。
    文件流指針和文件描述符特性幾乎相同!
  文件流指針比文件描述符多了一個緩存特性!
  文件流指針中:
   stdin:標準輸入 stdout:標準輸出 stderr:標準異常(都是地址)
  文件流結構體:

標準IO中的標準文件操作函數

標準IO    文件IO
fopen     open
fclose     close
fseek ,rewind  lseek

fread      read
fwrite      write
ftell

fopen();

函數原型:FILE* fopen(const char *path, const char *mode);
路徑 讀寫方式(等同於open的flags)
函數功能:根據提供的文件名,得到對應的文件流指針,通過返回值返回。
形參列表:
  path:帶路徑的文件名
  mode:對文件的操作方式
  “r” :只讀 <不能創建文件> 文件必須存在
  “w” :只寫 <清空寫> <能夠創建文件>
  “a” :只寫 <追加寫> <能夠創建文件>

+讀寫方式
  “r+” :讀寫 <覆蓋寫> <不能創建文件>
  “w+”:讀寫 <清空寫> <能夠創建文件>
  “a+” : 讀寫 <追加寫> <能夠創建文件>
操作總結:
在這裏插入圖片描述

返回值:
  成功:文件對應的文件流指針 – fp
  失敗:NULL

#include <stdio.h>
int main (int argc, char*argv[])
{

  if(argc!=2)
  {
   printf("請使用格式:%s 文件名\n ",argv[1]);
   return -1;
  }

    FILE *fp=  fopen(argv[0], "r");
  if(fp == NULL)
  {
    printf("文件 %s不存在\n",argv[1]);
    return -2;
   }

    printf("成功打開文件%s \n",argv[1]);
    return 0;

}

fread();

  函數原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE stream);
  函數功能:從stream指向的文件中最大讀取size
nmemb個字節的數據,存放到ptr指向的緩存區中

形參列表:
  讀到哪: ptr:緩存區 --> 存放從文件中讀取到的數據
  讀多少: size:一塊數據的字節數 (一次讀取一塊數據)
  一次讀多少塊: nmemb:最大讀取的塊數
  從哪讀: stream:文件流指針 --> 指向要操作的文件
返回值:
  成功:實際讀取到的完整的塊數
  失敗:負數

fwrite();

函數原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函數功能:提取ptr緩存區中存放的數據,寫入到stream指向的文件中,最大寫入size * nmemb個字節數據
形參列表:
  ptr:緩存區 --> 存放着要寫入文件的數據
  size:一塊數據的字節數 (一次寫一塊數據),一般寫1
  nmemb:最大寫入的塊數 <實際寫入文件的塊數>
  stream:文件流指針 --> 指向要操作的文件
返回值:
  成功:實際寫入文件數據的完整的塊數
  失敗:負數

fseek();

  函數原型:int fseek(FILE *stream, long offset, int whence);
  函數功能:對文件偏移指針重新定位
形參列表:
  stream:文件流指針 – 表示要操作的文件
  offset:相對於基準點的偏移距離 (負數:向前偏移 正數:向後偏移)
whence:重新定位文件偏移指針的基準點
SEEK_SET :文件開頭
SEEK_CUR:文件偏移指針當前位置
SEEK_END:文件末尾
返回值:
  成功:0 失敗:-1

ftell();

函數原型:long ftell(FILE *stream);
函數功能:返回文件偏移指針當前位置到文件開頭的距離
形參列表:
  stream:文件流指針 – 要操作的文件
返回值:
  文件偏移指針當前位置到文件開頭的距離

rewind();

函數原型:void rewind(FILE *stream);
函數功能:把文件偏移指針重新定位到文件開頭。 == fseek(fp, 0, SEEK_SET);
形參列表:
stream:文件流指針 – 要操作的文件
返回值:無

fclose();

函數原型:int fclose(FILE *fp);
函數功能:關閉文件流指針
形參列表:
  fp:文件流指針 – 要操作的文件
返回值:
  成功:0
  失敗:-1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章