리눅스 umask 질문 있습니다.
글쓴이: 익명 사용자 / 작성시간: 화, 2020/09/29 - 2:04오전
안녕하세요 혼자서 리눅스 공부하고 있는 학생입니다.
어떤 홈페이지에 있는 것을 보며 공부하던 중 막히는 부분이 생겨 질문 드립니다.
umask를 통해 이전 접근 권한자와 새 접근 권한자를 구하여 출력해내는 프로그램을 하고 있습니다.
프로그램을 실행하면
$ umask
0022
$ who > file1
$ ./test3 umask 027 sort -o file2 < file1
Old filemode creation mask: 0022
New filemode creation mask: 0000
이런 식으로 뜨는데, file1의 내용을 정렬하여 file2에 넣을 때 마스크 값을 027로 주어
새로운 마스크 값을 0027로 뜨게 하려고 하는데 저렇게 하게되면
오히려 이전 마스크 값이 0027로 바뀌었습니다.
코드가 문제인건지, 제가 명령어를 잘못 입력한건지 모르겠습니다.
홈페이지에는 file2가 실행되고 있어야만 유효하다는데 이해가 가지 않습니다.
file2는 실행파일이 아니라서 어떻게 해야할지 모르겠네요..
#include <stdio.h> #include <fcntl.h> main(argc,argv) int argc; char *argv[]; { mode_t newmask, oldmask; //int newmask, oldmask, atoi(), umask; long strtol(); int fork(); newmask = strtol(argv[1], (char **) NULL, 8); oldmask = umask(newmask); printf("Old filemode creation mask: %04o\n", oldmask); printf("New filemode creation mask: %04o\n", newmask); if(fork() == 0) { execvp(argv[2], &argv[2]); perror(argv[2]); exit(127); } }
Forums:
argv[1]은 "027" 이 아닌 "umask"를
argv[1]은 "027" 이 아닌 "umask"를 가리키므로
umask() 호출시 027이 아닌 0이 전달되고 있습니다.
실행시 아래와 같이 "umask"를 없애시거나
코드에서 argv[1]을 argv[2]로 수정하셔야겠네요.
이 경우 fork()이후의 코드에서도 argv[2]를 argv[3]로 바꾸셔야 하고요.
해결되었습니다!!
아 0이 전달되고 있던거군요ㅠㅠㅠ 감사합니다
더 공부해야겠네요,, 감사합니다!!!
댓글 달기