반응형
fseek(3)
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
stream에서 읽기 또는 쓰기 위치를 변경합니다. file의 읽기/쓰기 위치를 변경하는 system call 함수인 lseek(2)와 비슷하게 fseek(3)함수도 fd 대신 stream를 사용합니다. 다른 점은 lseek(2)는 return 값이 읽기/쓰기의 위치가 변경된 곳의 값이지만 fseek(3)은 정상이면 0을 오류이면 -1을 return합니다. 위치정보는 ftell(3)로 읽어야 합니다.
파라미터
stream
- 읽거나 쓰기의 위치를 변경할 FILE *
offset
- whence로 부터 이동할 상대 위치로 +-값을 가질 수 있으며, byte 단위의 위치입니다.
- SEEK_SET인 경우는 파일의 처음부터의 위치이므로 -값을 가질 수 없으며,
offset 값이 곧 실제 파일의 이동할 위치입니다.
whence
- offset 값의 상대 위치를 어디에서 시작할 것인지를 지정하는 값.
SEEK_SET : stream의 시작에서 offset 값 만큼 이동합니다.
offset값이 stream의 읽기/쓰기의 위치로 지정됩니다.
음수로 offset을 설정할 수 없습니다.
SEEK_CUR : 현재 읽기/쓰기 위치를 기준으로 offset값을 더한 위치로 이동합니다.(offset은 +-값)
SEEK_END : stream의 끝을 기준으로 offset값을 더한 위치로 이동합니다. (offset은 +-값)
RETURN
0
- 정상적으로 위치가 변경되었습니다.
-1
- 오류가 발생하였으며, 상세한 오류는 errno에 설정됩니다.
EBADF : stream이 위치를 이동시킬 수 있는 stream이 아닙니다.
EINVAL : whence argument를 잘못 설정하여 SEEK_SET, SEEK_END, SEEK_CUR가 아닙니다.
활용 예제
Sample : 파일의 크기를 얻는 Sample
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
FILE *fp;
int file_size;
if(argc != 2) {
return 1;
}
if((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "%s file open error: %s\n", argv[1], strerror(errno));
return 1;
}
/* file의 끝으로 이동 */
fseek(fp, 0, SEEK_END);
file_size = ftell(fp);
printf("%s file size: %d bytes", argv[1], file_size);
fclose(fp);
}
see also :
반응형
'C언어 header > stdio.h' 카테고리의 다른 글
fflush(3) - stream buffer를 쓰기를 수행하여 비움 (0) | 2019.09.24 |
---|---|
ftell(3) - stream의 읽기/쓰기 위치 얻기 (0) | 2019.09.24 |
fputs(3) - stream으로 1라인 쓰기 (0) | 2019.09.24 |
fputc(3) - stream으로 1바이트 쓰기 (0) | 2019.09.24 |
fgets(3) - stream으로부터 1라인 읽기 (0) | 2019.09.24 |