歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> linux常用c函數:文件內容操作篇(二)

linux常用c函數:文件內容操作篇(二)

日期:2017/2/25 10:38:52   编辑:Linux教程
 fopen(打開文件)

  相關函數 open,fclose

  表頭文件 #include<stdio.h>

  定義函數 FILE * fopen(const char * path,const char * mode);

  函數說明 參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表著流形態。

  mode有下列幾種形態字符串:

  r 打開只讀文件,該文件必須存在。

  r+ 打開可讀寫的文件,該文件必須存在。

  w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。

  w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。

  a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。

  a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。

  上述的形態字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數庫打開的文件為二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字符。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask 值。

  返回值 文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。

  附加說明 一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。

  范例 #include<stdio.h>

  main()

  {

  FILE * fp;

  fp=fopen(“noexist”,”a+”);

  if(fp= =NULL) return;

  fclose(fp);

  }

  fputc(將一指定字符寫入文件流中)

  相關函數 fopen,fwrite,fscanf,putc

  表頭文件 #include<stdio.h>

  定義函數 int fputc(int c,FILE * stream);

  函數說明 fputc 會將參數c 轉為unsigned char 後寫入參數stream 指定的文件中。

  返回值 fputc()會返回寫入成功的字符,即參數c。若返回EOF則代表寫入失敗。

  范例 #include<stdio.h>

  main()

  {

  FILE * fp;

  char a[26]=”abcdefghijklmnopqrstuvwxyz”;

  int i;

  fp= fopen(“noexist”,”w”);

  for(i=0;i<26;i++)

  fputc(a[i],fp);

  fclose(fp);

  }

  fputs(將一指定的字符串寫入文件內)

  相關函數 fopen,fwrite,fscanf,fputc,putc

  表頭文件 #include<stdio.h>

  定義函數 int fputs(const char * s,FILE * stream);

  函數說明 fputs()用來將參數s所指的字符串寫入到參數stream所指的文件內。

  返回值 若成功則返回寫出的字符個數,返回EOF則表示有錯誤發生。

  范例 請參考fgets()。

  fread(從文件流讀取數據)

  相關函數 fopen,fwrite,fseek,fscanf

  表頭文件 #include<stdio.h>

  定義函數 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

  函數說明 fread()用來從文件流中讀取數據。參數stream為已打開的文件指針,參數ptr 指向欲存放讀取進來的數據空間,讀取的字符數以參數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比參數 nmemb 來得小,則代表可能讀到了文件尾或有錯誤發生,這時必須用feof()或ferror()來決定發生什麼情況。

  返回值 返回實際讀取到的nmemb數目。

  附加說明

  范例 #include<stdio.h>

  #define nmemb 3

  struct test

  {

  char name[20];

  int size;

  }s[nmemb];

  main()

  {

  FILE * stream;

  int i;

  stream = fopen(“/tmp/fwrite”,”r”);

  fread(s,sizeof(struct test),nmemb,stream);

  fclose(stream);

  for(i=0;i<nmemb;i++)

  printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size);

  }

  執行 name[0]=Linux! size[0]=6

  name[1]=FreeBSD! size[1]=8

  name[2]=Windows2000 size[2]=11

  freopen(打開文件)

  相關函數 fopen,fclose

  表頭文件 #include<stdio.h>

  定義函數 FILE * freopen(const char * path,const char * mode,FILE * stream);

  函數說明 參數path字符串包含欲打開的文件路徑及文件名,參數mode請參考fopen()說明。參數stream為已打開的文件指針。Freopen()會將原stream所打開的文件流關閉,然後打開參數path的文件。

  返回值 文件順利打開後,指向該流的文件指針就會被返回。如果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。

  范例 #include<stdio.h>

  main()

  {

  FILE * fp;

  fp=fopen(“/etc/passwd”,”r”);

  fp=freopen(“/etc/group”,”r”,fp);

  fclose(fp);

  }

Copyright © Linux教程網 All Rights Reserved