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;
}
'파일처리' 카테고리의 다른 글
[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 |