2015년 7월 26일 일요일

20150727 파일 입출력

모든파일은 아래와 같은 형식을 가진다!
정보 헤더
그림정보 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);

댓글 없음:

댓글 쓰기