chmod 함수사용할때, S_mode 부분 8진수로 어떻게 올리나요?
글쓴이: jyj9782 / 작성시간: 화, 2004/05/11 - 3:32오전
int main(int argc, char *argv[]){ mode_t mode; mode = atoi(argv[1]); chmod("./file", mode);
이렇게 하면 되지를 않거든요. mode 는 8진수로 넣어줘야하거든요.
6자리여야 하고요. 000000 .. chmod 777 은 000777(8진수)
인데, 777 십진수로 입력받아서 다시 8진수로 변환하는 함수를
만들어서 바꿔서 넣어야만 하나요?
다른 방법이 있을거 같은데, 알려주세요..
Forums:
예전에 각자리 숫자를 shift해서 했던 기억이...좋은 방법들이 있
예전에 각자리 숫자를 shift해서 했던 기억이...
좋은 방법들이 있겠죠..
usr = argv[1][0]-'0';
grp = argv[1][1]-'0';
oth = argv[1][2]-'0';
mode = oth;
mode |= grp << 3;
mode |= usr << 6;
man strtol을 사용해보시죠...
man strtol
을 사용해보시죠...
---
http://coolengineer.com
해결했거든요. 근데.. 질문이..
언급해주신 부분으로 해결했어요 정말 고마워요.
그런데 질문이 있어요/ -'0'; 이부분 말인데요.
왜 하는건가요?
그리고 쉬프트를 3비트씩 오른쪽으로 밀어댕기는데..
16진수나 10진수만 쓰다보니.. 잘 이해가 안가는데요.
첨부설명해주시면 안될까요?
그리고 참고로 해결한 소스는 아래입니다.
힘내세요.
Re: 해결했거든요. 근데.. 질문이..
숫자 7과 문자'7'은 다르기 때문입니다.
숫자 7은 진짜 7이고,
문자 '7'은 7+'0'입니다. 정확히는 7 + 0x30 = 0x37 = 56이겠네요.
아스키 코드 표를 찾아보세요.
오른쪽 쉬프트 한번 할 때마다 2배씩 증가합니다.
log8 = 3이니 3번 쉬프트 하면 되겠구요.
765(8 ) = 7 * 8^2 + 6 * 8 + 5 = 얼마(10)
이니 그렇게 됩니다. (얼마는 계산하기 귀찮아서;; )
서로 비트가 겹치지 않으니 더하나 OR하나 결과는 똑같습니다.
댓글 달기