본문 바로가기

분류 전체보기114

[PL] Syntax, Semantics 관련 문제 풀이 (정답미확실) 2022. 4. 4.
[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.
[C언어-파일처리] 두 개의 파일 병합하기 (merge) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 [명세] 이미 존재하는 두 개의 파일, 과 의 데이터를 병합한 새로운 파일 을 생성한다. 병합은 과 의 순서를 따르며, 의 크기는 입력된 두 개의 파일의 크기의 합과 정확히 일치해야 한다. a.out [소스 코드] - merge.c #include #include #include int main(int argc, char *argv[]){ FILE *fp1 = fopen(argv[1],"r"); FILE *fp2 = fopen(argv[2],"r"); FILE *fp3 = fopen(argv[3],"w"); // 파일크기 구하기 int size1,size2,size3; fseek(fp1,0,SEEK_END); size1 = ftell(.. 2022. 4. 4.
[C언어_파일처리] 오프셋, 바이트 수를 기준으로 파일 읽기 (read) OS : Linux 우분투 버전 18.04 컴파일러 : gcc 7.5 [명세] 이미 존재하는 파일에서 을 기준으로 왼쪽편 또는 오른쪽편에 존재하는 의 절대값에 해당하는 크기만큼의 데이터를 읽어서 화면에 출력한다. 만약 가 양수이면 오른쪽편의 데이터를, 음수이면 왼쪽편의 데이터를 읽는다. 가 0이면 데이터를 읽을 필요가 없으며 당연히 화면에 출력되는 데이터도 존재하지 않는다. 의 절대값만큼의 데이터가 왼쪽 또는 오른쪽에 존재하지 않으면 존재하는 데이터만 읽으면 된다. 예를 들면, 이 10이고 가 -5이면 오프셋 5부터 9까지 데이터를 읽어서 출력한다. a.out [소스 코드] - read.c #include #include int main(int argc, char *argv[]){ int offset =.. 2022. 4. 4.