c語言文件類型指針
我們在定義文件類型指針變量后,稱作該指針指向該文件,但本質上,它不是指向一個存儲文件信息的結構型變量么?
那么我們在用各個函數對所謂的“文件指針”進行操作時,本質上是不是函數通過獲取文件指針所指向的文件信息內部的數據,才進行真正意義上的文件操作的吧?
比方說讀寫時候的文件內部的那個一位一位移動的指針其實是結構型變量里的一個成員吧?
c語言文件類型指針_百度知道 https://zhidao.baidu.com/question/515085768.html
c語言文件類型指針是通過FILE *fp; 這種形式進行定義的。
關於FILE結構在VC6中有如下定義:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#ifndef _FILE_DEFINED
struct
_iobuf {
char
*_ptr;
//文件輸入的下一個位置
int
_cnt;
//當前緩沖區的相對位置
char
*_base;
//指基礎位置(即是文件的起始位置)
int
_flag;
//文件標志
int
_file;
//文件描述符id
int
_charbuf;
//檢查緩沖區狀況,如果無緩沖區則不讀取
int
_bufsiz;
//文件緩沖區大小
char
*_tmpfname;
//臨時文件名
};
typedef
struct
_iobuf
FILE
;
#define _FILE_DEFINED
#endif
|
C程序用不同的FILE結構管理每個文件。程序員可以使用文件,但是不需要知道FILE結構的細節。實際上,FILE結構是間接地操作系統的文件控制塊(FCB)來實現對文件的操作的,如下圖:
上面圖中的_file實際上是一個描述符,作為進入打開文件表索引的整數。
文件是存放在物理磁盤上的,包括文件控制塊(FCB)和數據塊。文件控制塊通常包括文件權限、日期(創建、讀取、修改)、擁有者、文件大小、數據塊信息。數據塊用來存儲實際的內容。當打開一個文件時,程序會將物理磁盤上的文件數據塊讀入到內存,然后通過文件指針的移動讀取內存中的文件數據。
相關函數:
-
FILE *fopen( char *file, char *open_mode ); //打開文件,讀文件到內存,返回文件信息結構指針
-
int fread( char s, int size, int num, FILE *fp ); //按字節讀取文件內容到s中
-
int fwrite( char s, int size, int num, FILE *fp ); //按字節將s地址中的數據寫到文件中
-
char *fgets( char *s, int max_size, FILE *fp); //讀一行數據到緩沖區s中
-
int fseek( FILE *fp, long offset, int whence); //移動文件指針到指定位置
-
void rewind(FILE *fp); //回到文件頭
-
long ftell(FILE *fp); //得到當前文件偏移位置
-
fclose(fp); //關閉文件,刷新緩存到物理磁盤上
FILE 類型是一個結構,
文件打開成功時,對它作了內存分配和初始化。
文件讀寫和文件操作有許多程序,除數據讀寫和轉換外還有許多操作,讀寫和操作既用到FILE結構里的內容,同時也修改和更新與文件有關的信息。
例如fseek,ftell,fgetpos,fsetpos,rewind,這些雖不是讀寫,但它們操作文件。
文件指針是FILE的一個成員。
問題:
FILE *fpt = fopen("a.txt","r");
為什么不能puts(fpt);將a.txt里面的內容打印出來?
只能通過fscanf轉換一下