![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/caeUaP/btrB6786wwD/YEfLZMboMUKUU1mUn44Lj1/img.png)
팀원과 함께 작성한 중간 보고서 내용입니다 :) 목차 1. 옵션 개요 2. 설계 내용 a. prompt 관련 b. 삭제 관련 c. 기타 3. 개발자 가이드 a. 개발환경 설정 b. 테스트 환경 설정 c. 빌드/테스트 방법 1. 옵션 개요 어떤 디렉터리에서 일부 파일은 남기고 나머지만 삭제하고자 할 때가 있다. 기존 rm의 interactive 옵션을 사용하면 모든 파일에 대해 삭제 여부를 입력하는 무의미한 작업을 반복하므로 다소 소모적이다. 따라서 본 프로젝트에서는 옵션명은 한번만 입력하고 파일명과 확장자만 반복적으로 입력하여 디렉터리 내부 다수의 파일 삭제를 돕는 고급 삭제 옵션을 추가함으로써 rm 명령어를 사용하는 사용자의 편의성을 높이려 한다. 옵션 타입 사용법 Short option rm -rb ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bH8327/btrB6QsWHo9/7KFMh4kTgdPKyVgZil43Q0/img.png)
1. --except-files 등록하기 A. rm.c 파일에 Long type 옵션 등록 Short type option인 -b가 ‘invalid option’으로 인식되는 문제를 해결하지 못하였지만, 일단 Long type option인 --except-files를 등록하였다. struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /coreutils/lib/getopt-ext.h 파일에는 option 구조..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bbkugE/btrB6Pt5siS/1YDhucTnDYvuw8xEfrfxEK/img.png)
1. --help로 -b와 --except-files 출력 A. --help 출력 함수에 옵션 설명 추가 void usage (int status) { if (status != EXIT_SUCCESS) emit_try_help (); else { printf (_("Usage: %s [OPTION]... [FILE]...\n"), program_name); fputs (_("\ Remove (unlink) the FILE(s).\n\ \n\ -f, --force ignore nonexistent files and arguments, never prompt\n\ -i prompt before every removal\n\ "), stdout); ... fputs (_("\ -r, -R, --recursiv..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/btjH5X/btrB6QzIfKR/kg8Xu6gU0e7HXDoZvbOOU0/img.png)
1. rm.c가 include한 헤더 파일 위치 파악 저번 주에 coreutils를 실행하기 위한 작업을 진행하였다. 그 결과 git clone한 coreutils 디렉터리에 실행에 필요한 여러 파일이 추가되어 디렉터리 내용이 많이 바뀌었다. 그중 rm.c 파일과 이와 연관된 파일만 분석하였다. 위 사진은 rm.c 파일의 include 부분을 캡처한 것이다. C언어 표준 라이브러리 stdio.h, assert.h, sys/types.h /coreutils/lib config.h, argmatch.h, error.h, root-dev-ino.h, yesno.h, priv-set.h /coreutils/src system.h, die.h, remove.h /gcc/include (별도 파일) getopt.h..