[완료] 입력받은 권한을 파일에 적용하는 프로그램을 만들고 있습니다!
글쓴이: 고양이를부탁해 / 작성시간: 일, 2008/05/18 - 10:26오후
안녕하세요 ^^
예전에 비슷한 질문을 올렸엇는데...그 후로 계속 혼자 하다보니 진척이 되긴 했는데
다됬다 싶으니 여기서 턱 막히네요..
프로그램 개요는 인자로 주는 권한을 설정하는 것인데 파일이 존재하지 않을 경우에는 파일을 생성하면서 권한설정을 하고
파일이 있을 경우에는 권한만(시간도) 설정해주는 겁니다.
그런데 존재하는 파일명을 줄 경우에는 안그러는데
존재하지 않는 파일명을 줄 경우에는 특정 권한이 적용이 안됩니다.
한 예로 likeastouch what -rwx -rw -w 입니다.
이렇게 실행시켜보면 없는 파일이므로 open으로 파일이 생성은 되지만 쓰기권한이(다른 권한은 다 되요) 설정이 안됩니다.
그치만 다시 한번 실행시켜보면 chmod를 이용해서 쓰기권한이 의도한 대로 설정이 됩니다..
도대체 무엇이 문제일까요??
도움 부탁드리겠습니다 감사합니다 ^^;;
아래는 지저분하지만 소스입니다!
#include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char *argv[]) { mode_t mode; int perm[3]={0,0,0}; int fd; int i,j; int len; /* 프로그램 설명문 보여주기 */ if(argc!=5){ printf("Useage: likeastouch <filename> <-USR_RWX> <-GRP_RWX> <OTH_RWX>\n"); printf("[examplue]\nlikeastouch file.out -r -rw -rwx\n"); } /* 권한값 구하기 * 첫 for문은 소유자권한, 그룹권한, 기타권한을 접근하는데 사용 * 둘째 for문은 입력값으로 주어진 각 권한을 검사해 대응하는 정수값으로 바꾸기 */ for(i=2; i<argc; i++){ for(j=1; argv[i][j] != '\0'; j++){ if(argv[i][j] == 'r') { printf("we fount %c\n",argv[i][j]); perm[i-2] += 4; } else if(argv[i][j] == 'w') { printf("we fount %c\n",argv[i][j]); perm[i-2] += 2; } else { printf("we fount %c\n",argv[i][j]); perm[i-2] += 1; } } } /* 권한을 합치기 * perm[0]은 소유자, perm[1]은 그룹 perm[2]는 다른유저 */ mode = perm[2]; mode |= perm[1] << 3; mode |= perm[0] << 6; printf("%d\n",mode); /* 파일이 존재하지 않으면 인자로 받은 권한값으로 만들고 * 존재하면 함수를 사용, 날짜와 권한 바꿈 */ if( access(argv[1],F_OK) != 0){ fd = open(argv[1], O_RDONLY|O_CREAT,mode); close(fd); } else{ chmod(argv[1],mode); utime(argv[1],NULL); } return 0; }
Forums:
umask
umask가 0022로 잡혀 있을 것 같네요.
열심히 하고 계신듯.. ^^
참고로 글 쓰실 때 include문에서 글자 안 잡혀 먹을려면 < 를 <로 변환해서 적어 보세요.
감사합니다!!
기본으로 설정되어있는 umask가 있었네요!!
open or create호출을 통해 파일을 만들때 mode매개변수를 umask와 비교해 권한이 설정된다는 걸
왜 몰랐을까요 정말 고맙습니다 우헤헤 ^_^
아 그리구 코드올리는 방법에 대해서 고맙습니다!
------------
힘들면 즐겁다.
------------
힘들면 즐겁다.
else 를 빼면 어떨까요
else 를 빼면 어떨까요 ?
소스 적으실 땐
OTL
좋은 답변 감사합니다!!
답변 감사합니다! 코드올리는 법도 잘몰랐네요 :)
그런데 else를 빼라는 말은 else이하에 있는 chmod,utime을
파일이 있든 없든간에 실행되게 하라는 건가요??
------------
힘들면 즐겁다.
------------
힘들면 즐겁다.
댓글 달기