본문 바로가기
: ) 파일처리

[C언어_파일처리] 순차읽기(레코드 순차 읽기)

by miiinn 2022. 4. 12.

OS : Linux 우분투 버전 18.04

컴파일러 : gcc 7.5

 

 

<명세>

주어진 <record_file_name> 파일에 저장되어 있는 모든 레코드를 순차적으로(sequential) 하나씩 사용자 프로그램 상으로 읽어 들이며, 이 과정에서 발생하는 전체 시간 비용을 출력한다 (gettimeofday() 함수 등을 사용). 아래 예시와 같이, 명령의 실행 후 화면에 그 시간 비용을 usec 단위의 정수값으로 출력한다.
 
a.out <record_file_name>

<예시>
$ a.out student.dat
3200 usec

 

 

 

<소스 코드> - seq_read.c

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <string.h>
//필요하면 header file 추가 가능

// input parameters: 레코드 파일
//
int main(int argc, char **argv)
{
    struct timeval start, end;

    gettimeofday(&start, NULL);

    FILE *fp = fopen(*(argv+1), "r"); // 읽어올 파일 열기

    char buffer[200]; // 레코드를 읽을 버퍼

    // 파일 크기 구하기
    fseek(fp, 0, SEEK_END);
    int size = ftell(fp);

    fseek(fp, 0, SEEK_SET); // 파일포인터 다시 맨앞으로

    int record_num = size / 200; // 레코드 개수 구하기

    // 레코드 개수만큼 읽기 반복
    for (int i=0; i< record_num; i++){
        fread( buffer, sizeof(char), sizeof(buffer), fp);
        memset(buffer,0,sizeof(buffer));
    }

    fclose(fp);

    gettimeofday(&end, NULL);
    int usec = ((end.tv_sec + end.tv_usec) - (start.tv_sec + start.tv_usec)); 
    printf("%d usec\n", usec);

	// 레코드 파일로부터 전체 레코드를 순차적으로 읽어들이고, 이때
	// 걸리는 시간을 측정하는 코드 구현

	return 0;
}