Skip to content

rlagksql219/rsync-crontab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚠️ 본 프로젝트는 명령어 관리 프로그램 ssu_crontab과 동기화 프로그램 ssu_rsync로 나뉘어집니다.
ssu_crontab ▶️ ssu_rsync 순서로 설명하겠습니다.


시스템 함수를 사용하여 새로운 명령어를 구현해봄으로써 쉘의 원리를 이해하고, 리눅스 시스템에서 제공하는 자료구조를 이용해 프로그램을 작성함으로써 시스템 프로그래밍 설계 및 응용 능력을 향상시키기 위한 목적으로 프로그램을 개발하게 되었습니다.

🔍 ssu_crontab 프로젝트 개요

리눅스 시스템 상에서 사용자가 주기적으로 실행하고자 하는 명령어를 등록하고 실행시켜주는 프로그램입니다.

프로그램 기본 사항

  • 사용자가 주기적으로 실행하는 명령어를 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이 있습니다.

함수 간 Call Graph

ssu_crontab

tab

ssu_crond

dd

함수 기능별 흐름도

ssu_crontab

tab_main

  • void cmd_add(char execution_cycle[ ], char *instructions);
    ssu_crontab_file에 입력받은 명령어를 추가하는 함수

add

  • void cmd_remove(char *command_number);
    ssu_crontab_file에서 인자로 입력받은 번호의 명령어를 삭제하는 함수

remove

ssu_crond

d main

🔍 테스트 및 결과

테스트 결과



🔍 ssu_rsync 프로젝트 개요

리눅스 시스템 상에서 사용자가 동기화를 원하는 파일이나 디렉토리를 동기화하는 프로그램입니다.

프로그램 기본 사항

  • 인자로 주어진 src 파일 혹은 디렉토리를 dst 디렉토리에 동기화

  • 동기화가 모두 완료되면 ssu_rsync_log 로그 파일에 기록


🔍 설계

동일한 파일에 대해서는 동기화를 진행하지 않도록 했습니다. 이때, 동일한 파일의 기준은 파일 이름, 파일 크기, 수정 시간입니다.
동기화 작업 도중에 SIGINT 시그널이 발생하면 동기화를 취소하도록 하였고, 동기화 도중에 파일을 open하지 못하도록 했습니다.

함수 간 Call Graph

call

함수 기능별 흐름도

main

  • void do_rsync(char *argv[ ]);
    src가 파일인 경우와 디렉토리인 경우로 나누어서 dst 디렉토리에 파일을 동기화하는 함수. 단, dst에 동일한 파일이 있는 경우에는 동기화를 진행하지 않는다.

do_rsync

  • void remove_copy_dst(char *argv[ ]);
    동기화 도중에 SIGINT 시그널을 받지 않아 정상적으로 동기화를 진행했을 경우, copy해뒀던 dst 디렉토리를 삭제하는 함수

remove_copy

  • static void ssu_signal_handler(int signo);
    동기화 도중에 SIGINT 시그널을 받았을 경우, dst 디렉토리의 내용을 전부 삭제하고 copy 해뒀던 디렉토리의 파일을 dst 디렉토리로 옮기는 함수

signal

🔍 테스트 및 결과

테스트 결과

About

리눅스 시스템 프로젝트 | 파일 시스템 동기화

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published