[완료] 입력받은 권한을 파일에 적용하는 프로그램을 만들고 있습니다!

0
points

안녕하세요 ^^

예전에 비슷한 질문을 올렸엇는데...그 후로 계속 혼자 하다보니 진척이 되긴 했는데
다됬다 싶으니 여기서 턱 막히네요..

프로그램 개요는 인자로 주는 권한을 설정하는 것인데 파일이 존재하지 않을 경우에는 파일을 생성하면서 권한설정을 하고
파일이 있을 경우에는 권한만(시간도) 설정해주는 겁니다.

그런데 존재하는 파일명을 줄 경우에는 안그러는데
존재하지 않는 파일명을 줄 경우에는 특정 권한이 적용이 안됩니다.

한 예로 likeastouch what -rwx -rw -w 입니다.
이렇게 실행시켜보면 없는 파일이므로 open으로 파일이 생성은 되지만 쓰기권한이(다른 권한은 다 되요) 설정이 안됩니다.
그치만 다시 한번 실행시켜보면 chmod를 이용해서 쓰기권한이 의도한 대로 설정이 됩니다..

도대체 무엇이 문제일까요??

도움 부탁드리겠습니다 감사합니다 ^^;;

아래는 지저분하지만 소스입니다!

[code]
#include
#include
#include
#include

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 <-USR_RWX> <-GRP_RWX> \n");
printf("[examplue]\nlikeastouch file.out -r -rw -rwx\n");
}

/* 권한값 구하기
* 첫 for문은 소유자권한, 그룹권한, 기타권한을 접근하는데 사용
* 둘째 for문은 입력값으로 주어진 각 권한을 검사해 대응하는 정수값으로 바꾸기 */
for(i=2; i

umask

0
points

umask가 0022로 잡혀 있을 것 같네요.

열심히 하고 계신듯.. ^^
참고로 글 쓰실 때 include문에서 글자 안 잡혀 먹을려면 < 를 &lt;로 변환해서 적어 보세요.

감사합니다!!

0
points

기본으로 설정되어있는 umask가 있었네요!!
open or create호출을 통해 파일을 만들때 mode매개변수를 umask와 비교해 권한이 설정된다는 걸
왜 몰랐을까요 정말 고맙습니다 우헤헤 ^_^

아 그리구 코드올리는 방법에 대해서 고맙습니다!

------------
힘들면 즐겁다.

bushi의 이미지
5878
points

else 를 빼면 어떨까요

0
points

else 를 빼면 어떨까요 ?

소스 적으실 땐

<code>
</code>

OTL

좋은 답변 감사합니다!!

0
points

답변 감사합니다! 코드올리는 법도 잘몰랐네요 :)

그런데 else를 빼라는 말은 else이하에 있는 chmod,utime을

파일이 있든 없든간에 실행되게 하라는 건가요??

------------
힘들면 즐겁다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.