본문 바로가기

컴퓨터/C

c에서 명령줄로 여러 옵션 받기

요즘 심심해서 관리를 대신 해주는 지인 서버에 반 자동화 프로그램을 만들고 있다.

이 서버는 여러 하드디스크가 있는데 용도에 맞게 각 하드에 디렉토리를 생성 -> 새 사용자를 추가하고 권한 위임와 공유, 마운트 지점까지 모든 작업을 수작업으로 하려면 조금 귀찮은데-특히 한명이 아니라면-이를 프로그램으로 짜 넣어 아이디와 비밀번호만 입력하면 미리 지정된 옵션대로 자동으로 되도록 하려고 한다.


파일질라의 암호화 방식이 md5여서 파일질라의 반자동화 프로그램을 만들기 위해선 md5의 알고리즘 프로그램이 필요한데 유명한 알고리즘인 만큼 인터넷에 이미 공개된 샘플이 있을 거라 생각하였다.

구글링을 해보니 RSA Data Security에서 1990년도에 발행한 샘플 코드가 있었는데 여기에서 내게 필요한 것 외에 또다른 나의 궁금증을 해결할 수 있었다.


이 프로그램에서는 별도의 메인 동작은 없지만 입력받은 argv 내용에 따라 동작이 달리하게끔 되어있는데

-s암호내용 을 입력하면 

-s를 떼버리고 남은 내용을 함수로 전달하는 간단한 방법이었다.

이런 간단한 걸 내가 너무 돌아가서 생각했다니 부끄러울 따름..


for (i = 1; i < argc; i++)

      if (argv[i][0] == '-' && argv[i][1] == 's')

        MDString (argv[i] + 2);

      else if (strcmp (argv[i], "-t") == 0)

        MDTimeTrial ();

      else if (strcmp (argv[i], "-x") == 0)

        MDTestSuite ();

      else MDFile (argv[i]);


다만 이 방법에서 궁금한 것은 각 동작이 입력받은 순차적으로는 동작하는 것 같지만 동시에 복합적으로는 안되는 것으로 보인다.

아무래도 복합적으로 동작하게 하려면 좀 더 복잡해야겠지.


혹시나 md5 예제 때문에 방문했다면 아래의 블로그를 확인해 받아가기를 바란다.


원문은 아니지만 http://yegam400.tistory.com/97 에서 원 소스를 보기 좋게 md5.h md5.c md5drive.c 로 나누어 주었다.

md5.h, md5.c가 중요하며 md5drive.c는 두 파일을 이용하여 실제 동작을 만들어 내기 위한 함수일 뿐 다른 프로그램에 이식하려면 저 두 가지만 있으면 될거라고 본다.

Visual C++ 6.0에서 만들었다고 해서 식겁했지만.. 뭐 다행히도 2013기준으로 상위버전으로 호환은 문제 없이 되었다.

(종종 너무 구버전에서 나온 프로젝트면 최신 버전에서 호환이 안되는 문제가 있기에..)