본문 바로가기
호기심_메모

lsoct / octls

by 겸손하게 빚진자로, 밝게 인사 2021. 8. 13.
728x90

ls에 의해 지정되는 허가의 집합(예를들면, rwxr-xr-x)

동등한 의미를 갖는 팔진수값으로 바꾸어주는 루틴 lsoct, 다시 반대로 바꿔주는 octls

int lsoct(char* perm)

{

int i, j, k, oct=0;

 

if(perm[0] == 'r') oct += 400;

if(perm[1] == 'w') oct += 200;

if(perm[2] == 'x') oct += 100;

if(perm[3] == 'r') oct += 40;

if(perm[4] == 'w') oct += 20;

if(perm[5] == 'x') oct += 10;

if(perm[6] == 'r') oct += 4;

if(perm[7] == 'w') oct += 2;

if(perm[8] == 'x') oct += 1;

 

i = oct % 10;

oct /= 10;

j = oct % 10;

oct /= 10;

k = oct % 10;

 

return(k*8*8+j*8+i);

}

 

char* octls(int oct)

{

char perm[10]="";

int i=6, remainder;

 

while(i >= 0){

remainder = oct % 10;

oct /= 10;

 

switch(remainder){

case 0: perm[i] = perm[i+1] = perm[i+2] = '-'; break;

case 1: perm[i+2] = 'x';

perm[i+1] = perm[i] = '-'; break;

case 2: perm[i] = perm[i+2] = '-';

perm[i+1] = 'w';

break;

case 3: perm[i+2] = 'x';

perm[i+1] = 'w';

perm[i] = '-';

break;

case 4: perm[i] = 'r';

perm[i+1] = perm[i+2] = '-';

break;

case 5: perm[i] = 'r';

perm[i+1] = '-';

perm[i+2] = 'x';

break;

case 6: perm[i] = 'r';

perm[i+1] = 'w';

perm[i+2] = '-';

break;

case 7: perm[i] = 'r';

perm[i+1] = 'w';

perm[i+2] = 'x';

break;

default : perror("wrong oct");

}

i -= 3;

}

return(perm);

}

반응형