리눅스 system call 함수를 이용하여 ls, chmod, touch명령어의 일부 기능을 수행하는 myls, mychmod, mytouch 명령어를 직접 만들어보았다. 명령어의 옵션이 상당히 많기 때문에 일부의 옵션만 구현하였다. 모든 프로그램은 system()이라는 system call함수를 사용하지 않았다.
소스코드는 글 맨 아래에 링크를 달아두었다.
우선 ls의 명령어는 굉장히 많기 때문에 일부옵션인 l, i, t, a옵션만 구현하였다. 모든 옵션은 동시에 가능하다 예를 들면 myls -lit <filename|pathname>과 같이 사용할 수 있다. 만약 매개변수가 경로명일 경우 해당 경로에 있는 모든 파일들을 보여주고 매개변수가 파일명일 경우 해당 파일에 대한 ls명령어 결과를 보여준다.
'l' 옵션을 준 경우 파일에 대한 자세한 사항을 보여준다.
'a' 옵션을 준 경우 '.'으로 시작하는 파일을 포함하여 디렉토리에 있는 숨겨진 파일 전부를 보여준다.
't' 옵션을 준 경우 경로에 있는 파일을 시간순으로 정렬하여 출력한다.
'i' 옵션을 준 경우 파일의 i-node 번호를 앞에 출력해준다.
아래는 실행 결과이다.
chmod 명령어는 숫자, 알파벳 모두 옵션으로 사용할 수 있도록 구현하였다. 따라서 다음과 같이 사용할 수 있다.
mychmod g+r <filename>
mychmod 644 <filename>
프로그램 내부에서는 chmod()라는 system call함수를 이용하여 파일의 접근권한을 수정한다. mychmod를 실행하기 전과 후에 ls명령어를 이용하여 파일 정보를 확인한다면 결과가 접근권한이 바뀌어있는 것을 확인할 수 있을 것이다.
아래는 실행 결과이다.
마지막으로 touch명령어는 굉장히 간단한 프로그램이다. 파일이 없을 경우 생성만 하면 되고 'c' 옵션의 경우 파일이 없을 경우 파일을 생성하지 않으면 된다. 만약 파일이 있을 경우 파일의 access, modify, change 시간을 현재 시간으로 갱신하기만 하면 된다. 이때 시간 변경은 utime()이라는 system call 함수를 이용하여 두 번째 인자로 NULL을 주어 자동적으로 현재 시간으로 수정하게 하면 된다. utime()함수는 access와 modify시간만 변경 가능하다. 따라서 현재 시간을 받아 그 시간 변수를 인자로 넘길 경우 각 줄을 실행하는 딜레이로 인해 change시간이 access와 modify의 시간과 다르게 갱신될 수 있다.
https://github.com/Seo-sang/LinuxSystemProgramming_ls_chmod_touch.git
Seo-sang/LinuxSystemProgramming_ls_chmod_touch
Contribute to Seo-sang/LinuxSystemProgramming_ls_chmod_touch development by creating an account on GitHub.
github.com
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
[Linux] 리눅스 시스템 프로그래밍 thread(스레드) 생성과 종료 (0) | 2021.08.06 |
---|---|
[Linux] 저수준 파일 입출력과 고수준 파일 입출력 (0) | 2021.07.20 |
[Linux] Bash shell script programming 2021년도 요일 구하기 (0) | 2021.07.19 |
[Linux] Bash shell script programming 소수 합 구하기 (0) | 2021.07.19 |
[Linux] Bash shell 환경 변수와 지역 변수 (0) | 2021.07.19 |