쿼터를 프로그램으로 구현하고자합니다.
글쓴이: kildongp / 작성시간: 금, 2003/03/28 - 2:30오후
쿼터를 구현하기 위해 여러가지를 찾아 보았지만. 프로그램적으로 해결하는
마땅한 방법을 찾지 못하였습니다. 제가 하고 하는 일은 사용자의 쿼터를
조정하는 일입니다. 쿼터 관련 명령어는 edquota 가 있으며 현재의 해결은
임의대로 쿼터를 조절하지 못하고 100M200M등의 단위로 기본의 쿼터를
가진 유저를 만들어 놓은후 edquota -p 100MUserid (세팅하고자하는아이디)
를 사용하여 기본 유저를 100M단위로 수없이 만들어 놓아서 해결은 하였습니다.
하지만 궁긍적으로는 원하는 메가 단위로 프로그램을 만들어야 할거 같아서
만들어 보려고 합니다. 일단 생각나는 방법은 다음의 세팅 방식을 흉내
내어서 파이프로 연후 해결할까 하는데 생각처럼 되질 않습니다.
리눅스 명령어를 보면 edquota 란 명령어가 있습니다.
이 명령어로 사용자의 쿼터를 조절할수 있습니다.
다음은 쉘커맨드입니다.
#]edquota -u korea Disk quotas for user korea (uid 502): Filesystem blocks soft hard inodes soft hard /dev/sda4 5080 100000 100000 552 0 0
위와 같이 쿼터정보가 뜨면서 Vim에디터가 열립니다. 그러면 열린부분을 편집해 주면 되지요.
이상을 프로그램으로 구현할까 하여 popen 을 사용하여 보았지만 안되더군요.
Vim: Warining:Output is not to a terminal
이라는 에러가 난 후에 Vim 화면이 뜹니다.
기존 소스입니다.
==========================================
int Quota_Mod (char *ftpid, char *dest) { char *cmd; char buf[BUFSIZ]; FILE *ptr; int i = 0; cmd=(char *)malloc(1024); sprintf(cmd,"/usr/sbin/edquota -u %s",ftpid); if((ptr = popen(cmd, "r")) != NULL) while (fgets(buf, BUFSIZ, ptr) != NULL){ if(i == 0){ strcpy(dest,buf); }else { strcat(dest,buf); } i++; (void) printf("%s", buf); } free(cmd); return 1; } int main(){ char *dest; dest = (char *)malloc(1024); Quota_Mod("korea",dest); printf("%s",dest); }
====================================
Help Me!.. Plz
Forums:
man 2 quotactl
man 2 quotactl
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
감사합니다. 제가 더 찾아 봤어야 했군요.
꾸~벅..
댓글 달기