본문 바로가기

: ) 파일처리9

[C언어_파일처리] 랜덤읽기 (레코드 랜덤 읽기) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 주어진 파일에 저장되어 있는 모든 레코드를 랜덤(random)하게 하나씩 사용자 프로그램 상으로 읽어 들이며, 이 과정에서 발생하는 전체 시간 비용을 출력한다. 아래 예시와 같이, 명령의 실행 후 화면에 그 시간 비용을 usec 단위의 정수값으로 출력한다. a.out $ a.out student.dat 120300 usec - rand_read.c #include #include #include #include #include #include //#define SUFFLE_NUM10000// 이 값은 마음대로 수정 가능 void GenRecordSequence(int *list, int n); void swap(int *a, int *.. 2022. 4. 12.
[C언어_파일처리] 순차읽기(레코드 순차 읽기) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 주어진 파일에 저장되어 있는 모든 레코드를 순차적으로(sequential) 하나씩 사용자 프로그램 상으로 읽어 들이며, 이 과정에서 발생하는 전체 시간 비용을 출력한다 (gettimeofday() 함수 등을 사용). 아래 예시와 같이, 명령의 실행 후 화면에 그 시간 비용을 usec 단위의 정수값으로 출력한다. a.out $ a.out student.dat 3200 usec - seq_read.c #include #include #include #include //필요하면 header file 추가 가능 // input parameters: 레코드 파일 // int main(int argc, char **argv) { struct ti.. 2022. 4. 12.
[C언어_파일처리] 학생 레코드 파일 생성 OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 student.h에 정의되어 있는 ‘Student’ 타입을 이용하여 주어진 파일에 학생 레코드를 하나씩 반복적으로 수만큼 저장한다. 학생 레코드의 크기는 200 바이트이며 레코드에는 굳이 의미있는 데이터를 채울 필요가 없으며 심지어 모든 학생 레코드의 데이터가 동일해도 상관없다. 단, 각 학생 레코드의 크기는 반드시 200 바이트가 되어야 한다. 명령의 실행 후 화면에 출력값은 없다. a.out * 참고로 레코드는 한 줄을 기준으로 한다. 예를들어 레코드 하나의 크기가 200바이트이고 이러한 레코드가 5개 있다면, 파일 안에는 총 5줄이 입력되고 각 줄은 200바이트의 내용이 들어있게된다. - create_records.c #inclu.. 2022. 4. 12.
[C언어_파일처리] 오프셋과 바이트 수를 이용해 파일에 있는 값 삭제하기 (delete) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 [명세] 이미 존재하는 파일에서 을 기준으로 왼쪽편 또는 오른쪽편에 존재하는 의 절대값에 해당하는 크기의 데이터를 삭제한다. 만약 가 양수이면 오른쪽편의 데이터를, 음수이면 왼쪽편의 데이터를 삭제한다. 가 0이면 데이터를 삭제할 필요가 없다. 의 절대값만큼의 데이터가 왼쪽 또는 오른쪽에 존재하지 않으면 존재하는 데이터만 삭제하면 된다. 예를 들면, 이 10이고 가 -5이면 오프셋 5부터 9까지 데이터를 삭제한다. 삭제 후 삭제 데이터를 기준으로 전후 데이터가 병합되어야 한다. 즉, 삭제 데이터만큼의 공간은 파일에서 사라져야 한다. a.out [소스 코드] - delete.c #include #include #include int mai.. 2022. 4. 4.
[C언어_파일처리] 파일에서 오프셋을 기준으로 데이터 끼워넣기 (insert) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 [명세] 이미 존재하는 파일에서 과 사이에 를 끼워 넣는다. 이 파일의 맨마지막(EOF제외)을 가리키면 append로 처리한다. 는 큰따옴표(“와 ”)로 묶어서 표현한다 (“abc”라고 입력하면 abc가 끼워넣을 데이터를 의미한다). a.out [소스 코드] - insert.c #include #include #include int main(int argc, char *argv[]){ int offset = atoi(argv[1]); FILE *fp = fopen(argv[3], "r+"); int size; // 파일 크기 fseek(fp,0,SEEK_END); size = ftell(fp); if(offset < 0|| offset.. 2022. 4. 4.
[C언어_파일처리] 파일에 데이터 덮어쓰기 (overwrite) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 [명세] 이미 존재하는 파일에서 주어진 에서부터 를 덮어쓴다. 덮어쓰기를 할 때 파일의 EOF를 만나면 중단하지 않고 그대로 쓰기를 진행한다. 는 큰따옴표(“와 ”)로 묶어서 표현한다 (“abc”라고 입력하면 abc가 덮어쓸 데이터를 의미한다). a.out [소스 코드] - overwrite.c #include #include int main(int argc, char *argv[]) { int offset = atoi(argv[1]); FILE *fp = fopen(argv[3],"r+"); fseek(fp, offset, SEEK_SET); // offset만큼 이동 fputs(argv[2],fp); fclose(fp); } 2022. 4. 4.