정보 | 헤더 |
그림정보 | data |
파일의 헤더부분의 파일정보를 읽어 들이면 파일뷰어 같은것을 만들수 있다!
파일포인터 = 파일의 위치를 알고있는 포인터
파일을 열때는 파일의 처음위치부터 읽어들이지만 append(추가)를 사용할때는
파일의 끝 부분을 가리킨다!
int fseek(FILE *stream, long offset, int wherefrom);
// stream으로 전달된 파일 위치 지시자를 wherefrom에서부터 offset 바이트만큼 이동
매개변수 wherefrom 이… | 파일 위치 지시자는… |
SEEK_SET(0) 이라면 | 파일 맨 앞에서부터 이동을 시작 |
SEEK_CUR(1) 이라면 | 현재 위치에서부터 이동을 시작 |
SEEK_END(2) 이라면 | 파일 맨 끝에서부터 이동을 시작 |
fseek(fp, 2, SEEK_SET); // 파일 맨 앞에서 2번째
fseek(fp, 2, SEEK_CUR); // 파일 위치자가 가리키는 곳에서부터 끝방향으로 2번째
fseek(fp, -2, SEEK_END); // 파일 맨 끝에서 2번째
저수준 파일 입출력
★참조 사이트
http://cont122.edunet4u.net/~chonwb03/57%C2%F7%BD%C3.htm
저수준의 파일 입출력에서는 FILE이란 구조 대신 간단하게 각 파일마다 번호를 사용하는데, 이를 파일 식별자(filedescriptor), 또는 핸들(handle)이라고 한다. 이 핸들은 0 이상의 값을 가지고 있는데 실제로 0과 1, 2는 고정된 의미(핸들 0은 표준 입력을 위한 번호이며 1은 표준 출력, 그리고 2는 표준 에러로 사용)를 갖고 있어서 파일을 처음 열게 되면 그 파일의 핸들은 3이 된다.
저수준의 파일 입출력에서도 파일을 사용하기 위해서는 파일을 먼저 열어야 하며, 이때 다음과 같이 open 함수를 사용한다.
int fd;
fd = open("파일 이름", 액세스 방식[, 모드]);
|
위에서 [ ]는 역시 생략할 수 있는 부분을 의미하며, 파일 이름은 fopen과 같이 열 파일의 이름이고 액세스 방식은 이 파일을 어떻게 열 것인가인데, fopen과는 달리 다음과 같은 형태로 사용한다.
모 드
|
값
|
내 용
|
O_RDONLY
|
0x0001
|
읽기 전용으로 파일을 연다.
|
O_WRONLY
|
0x0002
|
쓰기 전용으로 파일을 연다.
|
O_RDWR
|
0x0004
|
읽고 쓰기 위해 파일을 연다.
|
O_CREAT
|
0x0100
|
파일이 없을 경우 새로운 파일을 만든다.
|
O_TRUNC
|
0x0200
|
현재 있는 파일의 내용을 0으로(제거) 한다.
|
O_EXCL
|
0x0400
|
O_CREAT과 함께 사용하며, 파일이 없을 경우에만 연다.
|
O_APPEND
|
0x0800
|
파일을 쓰기용으로 열고 파일 포인터를 파일의 끝에 위치시킨다.
|
O_TEXT
|
0x4000
|
파일을 텍스트 형식으로 연다.
|
O_BINARY
|
0x8000
|
파일을 이진 형식으로 연다.
|
위의 O_로 시작하는 것들은 모두 상수로 이의 정의는 fcntl.h(이것은 file control의 약자)에 들어 있기 때문에 open 문을 사용하려면 반드시 fcntl.h를 포함하여야 한다.
위의 것들은 액세스 방식의 한 조건들로 여러 개를 동시에 같이 사용할 수 있으며 이 때에는 각 조건들을 '|'(비트 연산자 OR)를 이용해서 묶으면 된다.
data.da 란 파일을 읽기 전용으로 열고자 할 때에는 다음과 같이 하면 된다.
fd = open("data.dat", O_RDONLY);
|
댓글 없음:
댓글 쓰기