FILE 는 내부에 구조체로 정의되어 있습니다. 하시려는 동작이 포인터 대입 연산이라면 =, ++ 이런게 될건데요?
보통 stdio.h 에 정의되어 있습니다.
typedef 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 */
struct __sFILEX *_extra; /* additions to FILE to not break ABI */
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 (see WARNING) */
} FILE;
1) 대입연산 : 제 생각에는 타입만 같다면 가능하다고 봅니다.
FILE *fp, ptr_fp 라고 정의한다면 ptr_fp는 FILE 타입이므로 ptr_fp=fp는 맞지 않습니다.(띄어쓰기 주의)
2) 소타님의 답에 있는 대로 FILE*는 파일의 데이터를 가리키는 것이 아니라 파일의 정보(메타데이터라고 합니다.)를 담고 있는 메모리를 가리키므로 fp++는 실행후에는 더이상 fp가 가리키던 파일정보를 확인할 수 없게 됩니다.
fseek와 같은 함수들은 파일의 포인터를 이동한 후에 FILE구조체에 그 내용을 변경합니다.(fpos_t _offset가 현재 파일포인터를 가리킨다고 여겨집니다.)
fp++ 은 FILE크기만큼
fp++ 은 sizeof(FILE)만큼 포인터를 증가시킵니다. 무슨의미가 있을까요?
그리고 FILE *fp, ptr_fp에서 fp는 FILE*이고 ptr_fp는 FILE이므로 당연히 대입이 안됩니다.
FILE 는 내부에
FILE 는 내부에 구조체로 정의되어 있습니다. 하시려는 동작이 포인터 대입 연산이라면 =, ++ 이런게 될건데요?
보통 stdio.h 에 정의되어 있습니다.
1) 대입연산 : 제
1) 대입연산 : 제 생각에는 타입만 같다면 가능하다고 봅니다.
FILE *fp, ptr_fp 라고 정의한다면 ptr_fp는 FILE 타입이므로 ptr_fp=fp는 맞지 않습니다.(띄어쓰기 주의)
2) 소타님의 답에 있는 대로 FILE*는 파일의 데이터를 가리키는 것이 아니라 파일의 정보(메타데이터라고 합니다.)를 담고 있는 메모리를 가리키므로 fp++는 실행후에는 더이상 fp가 가리키던 파일정보를 확인할 수 없게 됩니다.
fseek와 같은 함수들은 파일의 포인터를 이동한 후에 FILE구조체에 그 내용을 변경합니다.(fpos_t _offset가 현재 파일포인터를 가리킨다고 여겨집니다.)
※ 파일접근 관련 함수들의 원형을 살펴보면 왜 그런지를 알 수 있을 것입니다.
FILE*형 변수와 파일의
FILE*형 변수와 파일의 읽기·쓰기 오프셋을 모두
파일 포인터라고 불러서 저런 혼동이 오는것 같네요.
댓글 달기