Skip to content

리눅스 시스템 프로그래밍 수업 과목 과제 코드 및 보고서 정리

Notifications You must be signed in to change notification settings

rhthrhrl0/linux-system-programming-assignments

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

linux-system-programming-assignments

리눅스 시스템 프로그래밍 수업 과목 과제 코드 및 보고서 정리

과제1 ssu_sindex

지정한 파일 또는 디렉토리의 이름을 탐색해서 파일 및 디렉토리의 속성을 비교하는 프로그램.

프로그램이 실행되고, 프롬프트가 떠야 함.(예시: 학번>> ) 이 프롬프트 상에서 입력을 받으며, find, help, exit 명령어를 입력할 수 있다. 여기서는 find에 대해서만 설명하며 자세한 것은 보고서에 나와있음.

find 명령어의 첫번째 인자는 기준 파일명(혹은 디렉토리도 가능함. 이는 뒤에 설명),두 번째 인자는 탐색을 시작할 디렉토리 경로임. 그 이후부터는 옵션들과 이 기준 파일과 이름과 크기가 동일한 모든 파일들을 찾아서, 정보들을 보여줘야 함.

또한, 이렇게 찾은 파일들 중 파일 내용이 기준 파일과 다른 것이 있을 수 있기 때문에 사용자가 지정한 옵션에 따라 파일 내용을 비교해서 기준파일과 다른 점을 출력해서 보여줘야 한다.

만약,입력 받은 첫번째 인자가 디렉토리였다면 이 프로그램의 동작방식은 달라진다. 첫 번째 인자가 디렉토리인 경우는 재귀를 활용해서 그 내부 모든 파일의 사이즈 합을 구하고, 이것을 해당 디렉토리의 크기로 정의한다. 이 경우, 기준 디렉토리와 크기 및 이름이 같은 모든 디렉토리를 찾아서 출력해서 보여주면 된다. 이후, 파일비교때와 동일하게 인덱스를 사용자가 선택해서 두 디렉토리 간의 차이를 보여줄 수 있어야 한다. 이때, 두 디렉토리 간의 차이는 내부에 들어있는 파일들을 기준으로 한다. 한쪽 디렉토리에만 있는 파일이면 한쪽에만 있다고 표시하고, 둘이 이름과 크기가 같은 파일이 있는 경우 모두 파일 비교때처럼 두 파일 간 내용 차이점을 출력한다.

학습한 것

  1. 디렉토리를 탐색하는 방법
  2. 유닉스 파일 시스템의 기본적인 구조와 i-node블록과 데이터 블록의 관계
  3. 파일의 정보를 얻을 수 있는 stat 자료구조와 stat 함수 사용법
  4. 정규 파일인지 디렉토리 파일인지, 그 외 파일인지를 알 수 있는 stat.st_mode 활용법

과제2 ssu_sdup

지정한 디렉토리 아래부터 시작해서, 지정한 최소크기~최대크기 범위 안에 들어오고, 지정한 확장자를 갖는 모든 파일들을 대상으로 그 안에서 동일한 내용을 갖는 파일들을 한 세트씩 묶어서 모든 세트를 보여주는 프로그램. 또한, 이 세트들 중 특정 세트를 지정하고 그 안의 특정 파일을 지정해서 지정한 옵션(d,i,f,t)을 활용해서 삭제할 수 있어야 함.

** 여기서 동일한 파일이라는 것의 정의는, 크기가 동일하고 해시알고리즘의 결과가 같은 파일들의 관계를 말함.

프로그램이 실행되고, 프롬프트가 떠야 함.(예시: 학번>> ) 이 프롬프트 상에서 입력을 받으며, fmd5, fsha1, exit, help 등의 명령어를 실행할 수 있다. 각 명령어는 내부적으로 fork-exec-wait 를 활용해서 별도의 프로세스로 구성되어야 함.

fmd5와 fsha1은 각각 md5, sha1 해시 알고리즘을 사용함.

fmd5와 fsha1은 알고리즘만 다를 뿐 동작 원리는 동일한 명령어임. 파일 확장자, 최소 크기, 최대 크기, 탐색 시작 디렉토리 등을 입력받아서 실행된다. 이차원 링크드리스트에 동일한 내용의 파일들을 관리하고, 사용자에게 보여주며 지정한 옵션에 따라 삭제가 가능해야 한다.

학습한 것

  1. fork-exec-wait 로 한 프로그램 안에서 멀티 프로세스로 분리하고 관리하는 방법
  2. Makefile 을 사용해서 컴파일,clean 등의 과정에 대한 간편화
  3. md5, sha1 해시 알고리즘에 대한 학습 및 사용법
  4. 이차원 링크드리스트를 직접 구현하고 관리하며 얻은 구현 능력 및 자료구조에 대한 이해도 향상

과제3 ssu_sfinder

사용자 쓰레드 라이브러리를 이용하여 리눅스 시스템 내 존재하는 동일한(중복) 파일을 찾고 삭제 및 복원하는 ssu_sfinder 프로그램 구현

기본적인 동작 구조는 ssu_sdup과 유사함. 다만, ssu_sdup이 멀티 프로세스로 파일탐색을 했다면, ssu_sfinder는 사용자 쓰레드 라이브러리를 사용해서 단일 프로세스 안에서 파일 탐색 과정을 쓰레드들끼리 분할해서 진행 시키는 것임. 또한, 이 프로그램에서 진행한 내용들을 로그파일에 모두 저장해야함. 단, 로그파일은 숨김파일로 관리한다.

fsha1, fmd5, list, trash, restore, exit, help 명령어를 사용가능하며, fsha1과 fmd5를 실행할때 -t 옵션을 사용해서 사용할 사용자 쓰레드 갯수를 지정가능하다. 최대 5개 까지 가능하며, 기본 값은 1개임.

list 명령어는 fsha1, fmd5 이후 실행할 수 있는 명령어이며, fsha1, fmd5 에서 출력한 이차원 링크드리스트를 재정렬하는 명령어다.

trash 명령어는 휴지통에 있는 파일들을 불러와서 지정한 정렬방식에 따라 화면에 출력해서 보여줘야 한다. 이를 위해, ~/.Trash 디렉토리 아래에, files 디렉토리와 info 파일을 관리해야 한다. files 디렉토리는 이 프로그램에서 삭제한 파일들을 담고 있고, info 파일에는 files 안에 있는 삭제된 파일들에 대해 복구할 수 있도록 메타 정보를 담고 있다.

restore 명령어는 trash 이후, 복구하고 싶은 파일을 지정해서 복구할 수 있는 명령어다. restore 를 수행한 이후 휴지통 목록을 다시 화면에 보여줘야 한다. 또한, 복구한 다음 list 명령어를 출력하면 복구한 내용을 반영한 중복 파일 관리 리스트 정보를 다시 보여줘야 한다.

학습한 것

  1. getopt 를 사용해서 체계적으로 명령어 옵션을 관리하는 방법
  2. 사용자 쓰레드 라이브러리를 사용해서 파일 탐색을 분할해서 하는 방법. 이 과정에서 뮤텍스로 임계영역을 관리함.
    1. 이 과정에서 이전 과제2와 다른 점은 메모리 제한에서 벗어나기 위해, 중복 파일 탐색 과정에서 디스크 상의 파일을 사용한다는 점임.
    2. 과정은 다음과 같다. 우선, 파일의 사이즈 별로 20182580 디렉토리 아래에 파일 크기를 이름으로 하는 파일을 만든다.
    3. 그리고 이 파일사이즈 이름으로 된 파일 안에, 이번에 탐색한 파일의 경로 정보를 적는다.
    4. 이후, 파일 사이즈 이름으로 된 파일들을 스레드 단위로 탐색하도록 한다. 이를 통해 메모리의 제약에서 벗어난 중복 파일 탐색을 할 수 있다.
  3. 실행 로그 파일을 작성하는 경험 및 삭제된 파일을 복구하기 위해 메타 데이터를 관리하는 경험

About

리눅스 시스템 프로그래밍 수업 과목 과제 코드 및 보고서 정리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published