linux의 명령어 mkdir을 구현할 것이다.
mkdir은 디렉터리를 만드는 명령어이다.
mkdir() System call을 이용하여 구현할 것이다.
System call 중 mkdir의 헤더는 sys/types.h, sys/stat.h에서 확인할 수 있다.
mkdir의 인자로는 경로와 권한이 필요하다.
R,W,X는 각각 read, write, execute로 읽기, 쓰기, 실행권한이고, 8진수로도 표기 가능하다.
(1은 읽기, 2는 쓰기, 4는 실행권한 ex) 읽기+쓰기, 3, 모든권한 7로 표현 가능하다.)
USR(U), GRP(G), OTH(O)는 유저, 그룹, 그 밖으로 나타난다.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
void main(int argc, char *argv[])
{
if(argc < 2) {
printf("error\n");
return;
}
mkdir(argv[1],0777);
}
위와 같이 코드를 작성하면, path 경로는 프로그램 실행시 넣어주는 인자, 권한은 user,group,other에 모든 권한을 주도록 하였다.
다음과 같이 실행 파일을 만들어 졌고, 실행해보면
testDir생성되었으나 접근 권한은 755로 설정되어있다.
이는 기본 umask 설정값이 0022로 설정되어 있어서인데 사용자의 실수로 생성되는 모든 파일에 접근권한을 제공한다면 중요파일에 다른 사용자가 접근하여 수정 및 삭제를 하기는 등의 문제를 방지하기위해 linux에서 기본 설정되어 있습니다.
(설정권한 - umask로 연산이 수행된다.)
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
void main(int argc, char *argv[])
{
if(argc < 2) {
printf("error\n");
return;
}
umask(0000); // umask 설정
mkdir(argv[1],0777);
}
따라서 runtime시 umask값을 0000으로 설정해두어 다시 실행한다면
다음과 같이 모든 사용자가 모든 권한을 갖는 디렉터리를 생성할 수 있다.
'CS > 시스템 프로그래밍' 카테고리의 다른 글
프록시 서버 구현 1-1 (0) | 2022.07.25 |
---|---|
시스템 프로그래밍 개요 (0) | 2022.07.19 |
댓글