파일 입출력
파일(File)이란? 컴퓨터에서 데이터의 모임으로 보조 기억 장치에 저장된 것 C언어에서 파일의 정의 컴퓨터에서 데이터의 모임으로 보조 기억 장치에 저장된 것 C언어에서 파일의 정의 디스크상의 파일뿐 만 아니라 키보드 입력, 디스플레이 장치 표시도 「파일」이라는 개념을 사용하여 공통화하였다. cf. 표준 입출력 파일
파일의 종류 텍스트(Text) 파일 바이너리(Binary) 파일 문자로서 읽을 수 있는 파일 ASCII파일 자동적으로 행 바꿈 문자 등 해석 바이너리(Binary) 파일 ASCII 문자표로 판독이 불가한 8비트 데이터들로 쓰여진 파일 보통, 프로그램에 의해서만 판독 가능한 형식 예: 실행파일(.exe), 워드파일(.doc) 등 압축 또는 구조화되어 있는 경우가 많다. 예: mp3파일, mpeg파일 등
파일을 다루는 순서 ① 파일 포인터 선언 ② 파일 열기 ③ 파일 읽기 or 쓰기 ④ 파일 닫기 예: FILE *fp ; 예: fp = fopen( “test.txt”, “r”); ③ 파일 읽기 or 쓰기 예: fprintf( fp, “%2d”, 10) ; ④ 파일 닫기 예: fclose( fp ) ;
파일 포인터 파일 포인터란? 파일 포인터 선언 파일의 읽고 쓰기를 시작할 수 있는 위치를 나타내는 표시 FILE 구조체의 포인터 FILE구조체 : 디바이스(device)와 데이터를 주고 받기 위한 I/O버퍼 등 필요한 정보들을 모아놓은 구조체 파일 포인터 선언 예: FILE *fp ; // fp : 파일 포인터
파일 열기 파일 오픈 해당 파일 이름으로 파일 열기에 성공하면, FILE 구조체 변수의 주소값을 반환하고, 실패하면 NULL을 반환한다. 예: fp = fopen( “test.txt”, “r”); if( !fp ) exit(1) ; 오픈 모드 오픈 모드 = 파일 접근모드 + 파일 종류 파일 접근모드 “r”: 읽기, “w”: 새 파일에 쓰기, “a”: 기존파일에 추가하기 파일 종류 “t”: 텍스트 파일, “b”: 바이너리 파일
텍스트 파일 쓰기 오픈 모드 “w” 지정한 서식으로 쓰기 예: FILE *fp ; fp = fopen( “test.txt”, “w”); 지정한 서식으로 쓰기 int a = 5; fprintf( fp, “%2d\n”, a) ; fprintf( fp, “Hello”) ; // printf( )와 비교
텍스트 파일 읽기 오픈 모드 “r” 한 줄씩 읽기 지정한 서식으로 읽기 예: FILE *fp ; fp = fopen( “test.txt”, “r”); 한 줄씩 읽기 행바꿈 코드까지 or 지정된 최대 문자만큼 fgets( s, 9, fp ) ; 지정한 서식으로 읽기 fscanf( fp, “%d”, &a) ;
feof( ) 파일의 끝을 체크하기 위한 함수 예제 : 텍스트 파일 전체 읽기 파일 포인터의 위치가 파일의 맨 끝(end of file)이면 참이 된다. 예제 : 텍스트 파일 전체 읽기 while( 1 ) { fgets(s, 255, fp); if( feof( fp ) ) break; printf(“%s”, s); }
바이너리 파일 쓰기 오픈 모드 “wb” 쓰기 예: fp = fopen( “test.dat”, “wb”); int buf[ ] = { 10, 20, 30 }; fwrite( buf, sizeof( int ), 3, fp ) ; 실제로 써넣은 횟수 반환 Error Check : 지정한 횟수와 반환값 틀릴 때
바이너리 파일 읽기 오픈 모드 “rb” 읽기 예: fp = fopen( “test.dat”, “rb”); int buf[10] ; fread( buf, sizeof( int ), 3, fp ) ; 실제로 읽은 횟수 반환 Error Check : 지정한 횟수와 반환값 틀릴 때
표준 입출력 파일 표준 입출력 파일이란 stdout(표준출력) 화면 표시 디스크상의 파일뿐 만 아니라 키보드 입력, 디스플레이 장치 출력도 「파일」을 처리하는 방식으로 데이터를 주고 받도록 한 것이다. stdin, stdout 등의 파일 포인터가 프로그램 시작과 동시에 자동으로 오픈되어 제공된다. stdout(표준출력) 화면 표시 fprintf( stdout, “%d”, 10); == printf(“%d”, 10); cf. stdin(표준입력) 키보드 입력
rand()함수1 p206 난수 발생기 씨앗값(seed) 지정 난수란 규칙성이 없는 숫자를 말한다. 0 <= rand( )함수 <= RAND_MAX : 이 범위의 정수값 발생 (stdlib.h필요) 씨앗값(seed) 지정 srand( time(0) ); // 난수 발생 기준값 time(0) // 초단위 정수값으로 현재 시간 반환
rand()함수2 난수 발생 수식 실습 N = a + b*(rand()%c) : a <= N <= (a + b*(c-1)) 사이의 값으로 a에서 시작해서 b간격으로 c개수 만큼 실습 20에서 100까지 10간격으로 난수를 발생시켜 3개의 값을 화면에 출력하시오.
실 습 Random 수를 텍스트 파일에 쓴다. Random 수가 저장된 텍스트 파일을 읽어 모든 값을 출력한다. 파일명, 데이터 개수를 입력 받는다. 0 ~ 99 사이의 랜덤값 생성. Random 수가 저장된 텍스트 파일을 읽어 모든 값을 출력한다. 파일명을 입력 받는다. 데이터 개수와 데이터를 출력한다.
End