⚠️ 본 프로젝트는 명령어 관리 프로그램ssu_crontab
과 동기화 프로그램ssu_rsync
로 나뉘어집니다.
ssu_crontab▶️ ssu_rsync 순서로 설명하겠습니다.
시스템 함수를 사용하여 새로운 명령어를 구현해봄으로써 쉘의 원리를 이해하고, 리눅스 시스템에서 제공하는 자료구조를 이용해 프로그램을 작성함으로써 시스템 프로그래밍 설계 및 응용 능력을 향상시키기 위한 목적으로 프로그램을 개발하게 되었습니다.
리눅스 시스템 상에서 사용자가 주기적으로 실행하고자 하는 명령어를 등록하고 실행시켜주는 프로그램입니다.
-
사용자가 주기적으로 실행하는 명령어를
ssu_crontab_file
에 저장 및 삭제하는 프로그램- 프로그램 실행 시, 명령어를 수행 할 프롬프트 출력
- add:
ssu_crontab_file
에 주기적으로 실행할 명령어 등록 - remove:
ssu_crontab_file
에서 입력한 번호의 명령어 제거 - exit: 프로그램 종료
-
주기적으로
ssu_crontab_file
에 저장된 명령어를 실행시킬ssu_crond
디몬 프로그램ssu_crontab_file
을 읽어 주기적으로 명령어 실행ssu_crond
를 통해 명령어가 수행되면ssu_crontab_log
로그 파일에 로그를 남김
프로그램은 주기적으로 실행할 명령어를 등록하는 ssu_crontab
과 등록된 명령어를 주기에 맞게 실행하는 ssu_crond
로 나뉘어집니다. 명령어를 주기에 맞게 실행하는 ssu_crond
프로그램은 디몬 프로세스로 구현하였으며 프롬프트에서 실행할 수 있는 명령어는 add, remove, exit이 있습니다.
ssu_crontab
ssu_crond
ssu_crontab
- void cmd_add(char execution_cycle[ ], char *instructions);
ssu_crontab_file
에 입력받은 명령어를 추가하는 함수
- void cmd_remove(char *command_number);
ssu_crontab_file
에서 인자로 입력받은 번호의 명령어를 삭제하는 함수
ssu_crond
리눅스 시스템 상에서 사용자가 동기화를 원하는 파일이나 디렉토리를 동기화하는 프로그램입니다.
-
인자로 주어진 src 파일 혹은 디렉토리를 dst 디렉토리에 동기화
-
동기화가 모두 완료되면
ssu_rsync_log
로그 파일에 기록
동일한 파일에 대해서는 동기화를 진행하지 않도록 했습니다. 이때, 동일한 파일의 기준은 파일 이름, 파일 크기, 수정 시간입니다.
동기화 작업 도중에 SIGINT 시그널이 발생하면 동기화를 취소하도록 하였고, 동기화 도중에 파일을 open하지 못하도록 했습니다.
- void do_rsync(char *argv[ ]);
src가 파일인 경우와 디렉토리인 경우로 나누어서 dst 디렉토리에 파일을 동기화하는 함수. 단, dst에 동일한 파일이 있는 경우에는 동기화를 진행하지 않는다.
- void remove_copy_dst(char *argv[ ]);
동기화 도중에 SIGINT 시그널을 받지 않아 정상적으로 동기화를 진행했을 경우, copy해뒀던 dst 디렉토리를 삭제하는 함수
- static void ssu_signal_handler(int signo);
동기화 도중에 SIGINT 시그널을 받았을 경우, dst 디렉토리의 내용을 전부 삭제하고 copy 해뒀던 디렉토리의 파일을 dst 디렉토리로 옮기는 함수