티스토리 뷰

728x90

1. 개요
   
fopen과 open의 차이점을 알고 파일입출력을 해본다.

2. 규격화된 파일 입출력
    - 원형 함수 : int fscanf( FILE *stream, const char *format [, argument].. );
    - 리턴값 :  읽혀진 필드의 수. 파일 끝 또는 에러 시 EOF(-1).
    - 데이터 역시 규격화 되어 있어야 한다. 안 그러면 에러
    - 출력은 fsacnf 대신 fprintf를 이용한다.
    - fprintf를는 기본 printf에 파라메터 FILE pointer를 추가한 것이다. 사용법도 printf와 같다.
    - 선별적 읽기(%*?)를 하여 데이터를 읽지 않고 줄수를 체크할 수 있다. 
   - 기본예제

 

3. fopen과 open

- open에는 규겨화된 데이터 파일입출력을 하지 못한다. -> fprintf와 fscanf가 없고 바이나리로 저장 및 읽을 수 있다.
- fopen은 File pointer를 리턴값으로 하고 fwrite시 파일이 없어면 생성해준다.
- open은 int가 리턴값이고 해당 리턴값은 파일의 파일테이블 번호라고 생각하면 된다. 그래서 write시 파일이 없으면 에러가 난다.
- 자료형에 데이터를 쓰거나 읽을 때 해당 자료형의 주소를 파라메터로 넣는다.

fopen

open

1
2
3
4
5
6
7
8
9
10
11
int main()
{
   File *fp = fopen("test.txt",wb);

   char test[10];

   fread(&test,sizeof(test),1,fp);

   fwrite(&test, sizeof(test),1,fp);
}
1
2
3
4
5
6
7
8
9
10
11
int main()
{
   int fd = fopen("test.txt",O_RDONLY);
 
   char test[10];

   read(fd, &test, sizeof(*test));

   write(fd, &test, sizeof(test));
}

 

4. fseek & lseek

- 읽고 있는 위치(File Location)를 변경하는 함수이다.
fseek(FILE* filep ointer, long Offset, int Origin);
- lseek(int file, long Offset, int Origin);
- 파라메타 앞에서부터 읽은 파일, 기준 점으로 부터 이동 거리, 기준점이다.
- Origin에는 SEEK_SET(맨 앞), SEEK_END(맨 끝), SEEK_CUR(현재 점)이 있다.

 

5. 응용 예제

- 규격화된 data.txt를 읽고 binary 파일인 result.bin으로 저장 후, 다시 binary 파일인 result.bin 읽고 seek 함수를 이용하며 원하는 k번째 데이터를 읽어본다. 추가로 k'번째 부터 n개의 데이터를 한번에 읽어도 본다.
- 프로젝트 파일 및 입력 파일 :
파일입출력.zip  data.txt

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함