文件操作的基本函數

文件操作的基本函數

一、標C下的文件操作基本函數

(1)fopen(3) / fdopen(3) / freopen(3)

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

功能:
  主要用於打開指定的文件;

參數:
  第一個參數:字符串形式的文件路徑名;
  第二個參數:操作文件的具體方式,但不能指定文件本身沒有的權限;
    r - - - - - 以只讀的方式打開,stream指向文件的開頭;
    r+ - - - - 以讀寫的方式打開,stream指向文件的開頭;
    w - - - – 以只寫的方式打開,若文件存在,會清空原文件中的內容;若不存在,則創建文件,stream指向文件的開頭;
    w+ - - – 以讀寫的方式打開,除此外和w相同;
    a - - - - - 以追加寫入的方式打開,若文件不存在,會創建文件,stream指向文件的末尾;
    a+ - - - - 以讀寫的方式打開,stream指向文件的開頭,但寫入時會從文件末尾追加寫入;(不建議同時進行讀取和寫入操作
  如果要對二進制文件進行操作,那麼在選擇具體的方式中應添加字母b

返回值:
  success —- FILE結構體類型的指針,error —- NULL;

struct _IO_FILE {
    int _flags;
    char* _IO_read_ptr;
    ......
};
typedef struct _IO_FILE FILE;
#include <stdio.h>
FILE *fdopen(int fd, const char *mode);

功能:
  主要用於將文件描述符對應的文件轉換爲文件指針後返回,mode代表文件操作的具體方式,此處必須和原先文件描述詞讀寫模式相同;

返回值:
  success —- 文件指針,error —- NULL;

#include <stdio.h>
FILE *freopen(const char *path, const char *mode, FILE *stream);

功能:
  主要用於實現重定向,把預定義的標準流文件定向到由path指定的文件中。

參數:
  第一個參數:指定的重定向的字符串形式文件路徑名;
  第二個參數:文件訪問的具體權限,如:”r”表示“只讀訪問;
  第三個參數:流文件,一般使用標準流文件,如:stdin、stdout、stderr;

返回值:
  success —- 指向該輸出流的文件指針,error —- NULL;


(2)fclose(3)

#include <stdio.h>
int fclose(FILE *stream);

功能:
  主要用於關閉指定的文件,參數是fopen(3)的返回值;

返回值:
  success —- 0,error —- EOF;

(3)fread(3)

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/* size_t = long unsigned int */

功能:
  主要用於讀取指定文件中的內容;

參數:
  第一個參數:存放讀取內容的地址;
  第二個參數:讀取數據類型的大小;
  第三個參數:讀取相同數據類型的個數;
  第四個參數:結構體類型的指針,同樣是fopen(3)的返回值;

返回值:
  success —- 實際讀取指定數據類型的個數,error和end-of-file —- 0;(區分應使用feof(3)ferror(3)

(4)fwrite(3)

#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:
  主要向指定的文件中寫入內容;

參數:
  第一個參數:存放要寫入數據空間的地址;
  第二個參數:存入數據類型的大小;
  第三個參數:存入相同數據類型的個數;
  第四個參數:結構體類型的指針,同樣是fopen(3)的返回值;

返回值:
  success —- 實際存入指定數據類型的個數,error和end-of-file —- 0;(區分應使用feof(3)ferror(3)

(5)fseek(3)

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

功能:
  主要用於設置stream指向的位置;

參數:
  第一個參數:結構體類型的指針,同樣是fopen(3)的返回值;
  第二個參數:指定的偏移量;
    >0 - - - - - - 向後偏移,也就是向文件末尾方向;
    0 - - - - - - -偏移量爲0;
    <0 - - - - - - 向前偏移,也就是向文件開頭方向;
  第三個參數:指定起始位置;
    SEEK_SET - - - - 文件開頭位置(向後偏移合理,向前偏移不合理)
    SEEK_CUR - - – 文件當前位置(向前向後偏移都合理)
    SEEK_END - - – 文件末尾位置(向前向後偏移都合理)

(6)rewind(3)

#include <stdio.h>
void rewind(FILE *stream);

功能:
  將偏移量設置爲文件的開頭,即等同與(void) fseek(stream, 0L, SEEK_SET),其中0L等於0字節;

(7)ftell(3)

#include <stdio.h>
long ftell(FILE *stream);

功能:
  主要用於獲取當前位置的偏移量,配合fseek(3)可獲得文件的大小信息,參數是結構體類型的指針,同樣是fopen(3)的返回值;

返回值:
  success —- 當前位置的偏移量,error —- -1;


二、UC下的文件操作基本函數

(1)creat(2)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);

功能:
  主要用來創建一個文件;

參數:
  第一個參數:字符串形式的文件路徑名;
  第二個參數:創建文件的具體權限,如:0664;

返回值:
  success —- 文件描述符,error —- -1;

(2)open(2)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);

功能:
  主要用來打開或創建一個文件;

參數:
  第一個參數:字符串形式的文件路徑名;
  第二個參數:具體的標誌如下所示;
    其中O_RDONLY | O_WRONLY | O_RDWR必須三者擇一
    其它標誌可根據需要選擇:
      O_APPEND - - - - 追加寫入,即打開文件時文件位置偏移量在文件末尾;
      O_CREAT - - - - – 若文件不存在,則創建文件;
      O_EXCL - - - - - - -通常與O_CREAT配合使用,若文件不存在,則創建文件,若文件存在,則失敗;
      O_TRUNC - - - - -若文件存在,則清空文件內容,文件大小變爲0字節
  第三個參數:創建文件的具體權限,如:0664;

返回值:
  success —- 文件描述符,error —- -1;

(3)close(2)

#include <unistd.h>
int close(int fd);

功能:
  主要用於關閉一個被打開的文件。

參數:
  第一個參數:文件描述符,也就是open()的返回值;

(4)read(2)

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
/* ssize_t = long int; size_t = long unsigned int; */

功能:
  主要用於讀取指定文件中的內容;

參數:
  第一個參數:文件描述符,同樣是open()的返回值;
  第二個參數:存放讀取數據空間的地址;
  第三個參數:期望讀取的字節數;

返回值:
  success —- 實際讀取的字節數,error —- -1;

(5)write(2)

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

功能:
  主要用於向指定文件中寫入內容;

參數:
  第一個參數:文件描述符,同樣是open()的返回值;
  第二個參數:要寫入的數據的存儲地址;
  第三個參數:期望寫入的字節數;

返回值:
  success —- 實際寫入的字節數,error —- -1;

(6)lseek(2)

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);  //off_t = long int;

功能:
  主要用於重新定位文件讀寫時的偏移量,可以獲取文件的大小信息;

參數:
  第一個參數:文件描述符,同樣是open()的返回值;
  第二個參數:指定偏移量;
    >0 - - - - - - 向後偏移,也就是向文件末尾方向;
    0 - - - - - - -偏移量爲0;
    <0 - - - - - - 向前偏移,也就是向文件開頭方向;
  第三個參數:指定起始位置;
    SEEK_SET - - - - 文件開頭位置(向後偏移合理,向前偏移不合理)
    SEEK_CUR - - – 文件當前位置(向前向後偏移都合理)
    SEEK_END - - – 文件末尾位置(向前向後偏移都合理)

返回值:
  success —- 距離文件開頭位置的偏移量,error —- (off_t)-1;

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