什么是文件位置指针?

时间:2016-09-25 14:13:19

标签: c pointers file-handling

我正在使用this网站学习C.

fgetc()功能下,作者说:

  

此函数从文件中读取单个字符,并在读取后递增文件位置指针。

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

我想问的是file position pointer是否与指针fp不同?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

表示文件中的当前偏移量。它是ftell的返回值。