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

[C언어_파일처리] 학생 레코드 파일 생성

by miiinn 2022. 4. 12.

OS : Linux 우분투 버전 18.04

컴파일러 : gcc 7.5

 

 

<명세>

student.h에 정의되어 있는 ‘Student’ 타입을 이용하여 주어진 <record_file_name> 파일에 학생 레코드를 하나씩 반복적으로 <#records> 수만큼 저장한다. 학생 레코드의 크기는 200 바이트이며 레코드에는 굳이 의미있는 데이터를 채울 필요가 없으며 심지어 모든 학생 레코드의 데이터가 동일해도 상관없다. 단, 각 학생 레코드의 크기는 반드시 200 바이트가 되어야 한다. 명령의 실행 후 화면에 출력값은 없다.
 
a.out <#records> <record_file_name>

* 참고로 레코드는 한 줄을 기준으로 한다. 예를들어 레코드 하나의 크기가 200바이트이고 이러한 레코드가 5개 있다면, 파일 안에는 총 5줄이 입력되고 각 줄은 200바이트의 내용이 들어있게된다.

 

 

 

<소스 코드> - create_records.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 필요하면 header 파일 추가 가능

//
// input parameters: 학생 레코드 수, 레코드 파일
//
int main(int argc, char **argv)
{
    int record = atoi(*(argv+1)); // 레코드 수
    
    char Student[199]; // 학생 레코드 - 199바이트
    memset(Student, 's', sizeof(Student)); // 199바이트 내용 채우기

    FILE *fp = fopen(*(argv+2), "w"); // 학생 레코드를 쓸 파일

    char a = '\n';

    for (int i=0; i<record; i++){
        fwrite(Student, sizeof(char), sizeof(Student), fp); // 레코드 수 만큼 저장.
        fwrite( &a, sizeof(char), 1, fp); // 마지막에 개행
    }

    fclose(fp);
	
	// 사용자로부터 입력 받은 레코드 수 만큼의 레코드 파일을 생성하는 코드 구현
	
	// 파일에 '학생 레코드' 저장할 때 주의 사항
	// 1. 레코드의 크기는 무조건 200 바이트를 준수
	// 2. 레코드 파일에서 레코드와 레코드 사이에 어떤 데이터도 들어가면 안됨
	// 3. 레코드에는 임의의 데이터를 저장해도 무방
	// 4. 만약 n개의 레코드를 저장하면 파일 크기는 정확히 200 x n 바이트가 되어야 함

	return 0;
}