2016-09-25 75 views
3

我正在學習C,使用this網站。什麼是文件位置指針?

fgetc()功能對筆者說:

此功能從文件中讀取一個字符和閱讀後增加的文件位置指針。

FILE *fp; 
fp = fopen(filename, "r"); 

我想問的是,file position pointer是從指針fp與否有什麼不同?

+0

指向文件並指向文件中的位置是有區別的。 –

+0

@JohnColeman所以兩者都不同 – Cody

+1

是的。當位置指針前進通過文件時,您需要將'fp'指向文件本身。否則 - 當你完成後,你將如何關閉它? –

回答

4

不,他們是不一樣的。 fp是指向結構FILE的指針。文件位置指針顯然指向文件中的位置。

你可以在你的包含路徑中看到stdio.h。在FreeBSD中,FILE被定義爲:

struct __sFILE { 
    unsigned char *_p; /* (*) current position in (some) buffer */ 
    int _r;  /* (*) read space left for getc() */ 
    int _w;  /* (*) write space left for putc() */ 
    short _flags;  /* (*) flags, below; this FILE is free if 0 */ 
    short _file;  /* (*) fileno, if Unix descriptor, else -1 */ 
    struct __sbuf _bf; /* (*) the buffer (at least 1 byte, if !NULL) */ 
    int _lbfsize; /* (*) 0 or -_bf._size, for inline putc */ 
/* operations */ 
void *_cookie; /* (*) cookie passed to io functions */ 
int (*_close)(void *); 
int (*_read)(void *, char *, int); 
fpos_t (*_seek)(void *, fpos_t, int); 
int (*_write)(void *, const char *, int); 

/* separate buffer for long sequences of ungetc() */ 
struct __sbuf _ub; /* ungetc buffer */ 
unsigned char *_up; /* saved _p when _p is doing ungetc data */ 
int _ur;  /* saved _r when _r is counting ungetc data */ 

/* tricks to meet minimum requirements even when malloc() fails */ 
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ 
unsigned char _nbuf[1]; /* guarantee a getc() buffer */ 

/* separate buffer for fgetln() when line crosses buffer boundary */ 
struct __sbuf _lb; /* buffer for fgetln() */ 

/* Unix stdio files get aligned to block boundaries on fseek() */ 
int _blksize; /* stat.st_blksize (may be != _bf._size) */ 
fpos_t _offset; /* current lseek offset */ 

struct pthread_mutex *_fl_mutex; /* used for MT-safety */ 
struct pthread *_fl_owner; /* current owner */ 
int _fl_count; /* recursive lock count */ 
int _orientation; /* orientation for fwide() */ 
__mbstate_t _mbstate; /* multibyte conversion state */ 
int _flags2; /* additional flags */ 
}; 
typedef struct __sFILE FILE; 
+0

你能指出我哪個FILE結構的成員表示文件位置指針嗎? – Cody

+0

是那個* curp? – Cody

+1

@Cody我發現在某個網站上。我試圖在我的stdio.h中找到它,但一直中斷。這取決於我相信的操作系統。在FreeBSD上,它與此截然不同。編輯:我編輯我的答案來顯示FreeBSD的定義。 – Rob

4

它表示您當前在文件中的偏移量。這是ftell的返回值。