fseek()
fseek()
앞의 포스트에서 ftell()과 rewind()를 이용해 위치표시를 재설정하는 방법에 대해 설명했습니다. fseek()는 스트림의 위치표시를 더욱 정확하게 제어하기 위해서 사용되는 함수입니다. fseek()를 사용하면 위치표시가 파일 내에서 랜덤한 위치를 가리키도록 설정할 수 있습니다.
fseek(FILE *fp, long offset, int origin);
fp는 파일에 대한 포인터입니다. 자주 언급하는 내용이니 넘어가겠습니다. 위치표시가 이동되는 거리는 offset에 바이트 단위로 지정되기 때문에 sizeof()많이 사용합니다. origin은 이동이 시작되는 위치를 지정합니다. origin에 사용할 수 있는 기호 상수가 따로 있기 때문에 알려드리겠습니다.
*origin에 사용할 수 있는 기호상수는 io.h에 정의되어 있기 때문에 io.h도 포함시켜주시기 바랍니다.
SEEK_SET |
0 |
위치표시를 파일의 시작부터 offset 바이트 뒤로 이동합니다. |
SEEK_CUR |
1 |
위치표시를 현재 위치에서 offset 바이트 뒤로 이동합니다. |
SEEK_END |
2 |
위치표시를 파일의 마지막부터 offset 바이트 앞으로 이동합니다. |
fseek()함수의 동작이 성공적이라면 0을 돌려주고 에러가 발생하면 0이 아닌 다른 값을 돌려줍니다.(반드시 -1을 돌려주는 것은 아니니 주의해주세요!) 예제를 보겠습니다.
#include <stdio.h> #define MAX 50 main(){ puts("쓰기상태로 파일을 엽니다. 파일이름을 입력해주세요."); if((fwrite(arr,sizeof(int),MAX,fp)) !=MAX) if((fp=fopen(filename,"rb"))==NULL){ while(1) if((fseek(fp,(offset*sizeof(int)),SEEK_SET)) != 0){ //위치 표시를 파일의 시작으로부터 0만큼 뒤로 이동시킵니다. |