OS : Linux 우분투 버전 18.04
컴파일러 : gcc 7.5
[명세]
이미 존재하는 파일에서 <오프셋(=0, 1, 2, ...)>과 <오프셋+1> 사이에 <데이터>를 끼워 넣는다. <오프셋>이 파일의 맨마지막(EOF제외)을 가리키면 append로 처리한다. <데이터>는 큰따옴표(“와 ”)로 묶어서 표현한다 (“abc”라고 입력하면 abc가 끼워넣을 데이터를 의미한다).
a.out <오프셋> <데이터> <파일명>
[소스 코드] - insert.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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 > size){
printf("offset이 음수이거나 읽을 수 있는 파일크기를 초과했습니다\n");
return 0;
}
else if ( offset == size-1|| offset == size){ // 파일의 맨마지막 이므로 append처리
// printf("%s\n",)
fseek(fp, -1, SEEK_END); // 맨 마지막부터 문자 삽입
fwrite(argv[2],sizeof(char), strlen(argv[2]), fp);
//fputs(argv[2], fp); // 개행??
return 0;
}
fseek(fp, offset+1, SEEK_SET); // offset다음 부터 복사해두기
int buffer_size = size-offset;
//뒤에 내용 복사해놓기
char *buffer = (char *)malloc(sizeof(char *)*sizeof(buffer_size)); // 넉넉히 할당..
fread(buffer, sizeof(char), buffer_size, fp); // char크기만큼 buffer번 가져오기
fseek(fp, offset+1, SEEK_SET);//offset 뒤부터 넣어야함
fputs(argv[2],fp);// 입력받은 문자 넣기
fputs(buffer,fp); // 복사해뒀던 뒷부분 붙여넣기
fclose(fp);
return 0;
}
'파일처리' 카테고리의 다른 글
[C언어_파일처리] 학생 레코드 파일 생성 (0) | 2022.04.12 |
---|---|
[C언어_파일처리] 오프셋과 바이트 수를 이용해 파일에 있는 값 삭제하기 (delete) (0) | 2022.04.04 |
[C언어_파일처리] 파일에 데이터 덮어쓰기 (overwrite) (0) | 2022.04.04 |
[C언어-파일처리] 두 개의 파일 병합하기 (merge) (0) | 2022.04.04 |
[C언어_파일처리] 오프셋, 바이트 수를 기준으로 파일 읽기 (read) (0) | 2022.04.04 |