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;
}
': ) 파일처리' 카테고리의 다른 글
[C언어_파일처리] 랜덤읽기 (레코드 랜덤 읽기) (0) | 2022.04.12 |
---|---|
[C언어_파일처리] 학생 레코드 파일 생성 (0) | 2022.04.12 |
[C언어_파일처리] 오프셋과 바이트 수를 이용해 파일에 있는 값 삭제하기 (delete) (0) | 2022.04.04 |
[C언어_파일처리] 파일에서 오프셋을 기준으로 데이터 끼워넣기 (insert) (0) | 2022.04.04 |
[C언어_파일처리] 파일에 데이터 덮어쓰기 (overwrite) (0) | 2022.04.04 |