mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Thursday, July 27, 2006

C언어 기초 예제] 실행할 때 지정해준 파라미터(옵션; 인수, Arguments) 얻기, 해석하기


Argument 란?


만약 dir 명령에 /a 옵션을 붙여서
dir /a
라고 실행시켰다면 /a 가 아규먼트가 됩니다. 쉽게 말해서, 실행시에 지정해 준 옵션입니다.



간단한 예제:
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#include <stdio.h>
#include <stdlib.h> // exit() 함수를 위해

#define MAX_COLS 32768

int main(int argc, char *argv[]) {
  FILE *in;
  char s[MAX_COLS]; // 행이 1줄씩 임시로 저장될 버퍼

  if (argc == 1) { // 옵션이 없으면 도움말 출력하고 종료
    fputs("\nHelp: program_name <file_name>\n", stderr);
    exit(1);
  }


  if ( (in = fopen(argv[1], "rt")) == NULL) { // fopen() 함수로 파일 열기
    fprintf(stderr, "\nCannot open input file: %s\n", argv[1]);
    exit(1); // 모든 파일 닫고, 프로그램 종료
  }


  while (fgets(s, MAX_COLS, in) != NULL) { // 읽기 시작: 프로그램의 본체
    printf(s); // 한 줄씩 화면에 출력
  }


  fcloseall(); // 모든 파일 닫기
  return 0;
}


이 소스는 도스의 type 명령이나 리눅스의 cat 명령처럼, 옵션으로 지정해 준 텍스트 파일의 내용을 화면에 출력하는 것입니다.


main(int argc, char *argv[])
이 부분이 이 글의 핵심입니다.

main()함수는 프로그램의 본체입니다. 그리고 int argc, char *argv[] 이것에는 그 프로그램을 실행시킬 때 지정해 준 옵션들 즉 Argument 가 들어가 있습니다.

argc : 옵션의 개수. 옵션을 아무것도 지정하지 않으면 1, 옵션이 한 개면 2임. 옵션이 2개면 3임. 왜냐하면 argv[0]가 항상 있기 때문에.

argv[1] : 첫번째 옵션 문자열
argv[2] : 두번째 옵션 문자열
argv[3] : 세번째 옵션 문자열
...
...
...

argv[0] : 이것은 프로그램 자신의 파일명입니다. 위의 소스를 foo.exe 라는 이름으로 컴파일하고 foo 라고 실행시켰다면 argv[0] 는 foo 가 됩니다. 프로그래밍을 하다 보면 프로그램 자체의 파일명을 알아야 할 때가 있는데 그럴 경우 사용하는 것입니다. 이것은 항상 존재하는 아규먼트입니다.


따라서 위의 예제의
fopen(argv[1], "rt")
에서 argv[1] 은, 프로그램을 실행할 때 첫번째 옵션으로 지정해준 파일명의 파일을 열라는 것입니다.


위의 예제를 컴파일하여
foo test.txt
이렇게 실행해 주면 test.txt의 내용을 화면에 출력합니다.

foo 는 실행 파일명
test.txt 는 첫번째 옵션이 되는 것입니다.


foo test.txt
라고 실행하면
argv[1] 에는 test.txt 가 들어갑니다.




(참고로, "rt" 는, 파일을 '텍스트 모드'로 그리고 '읽기전용'으로 열라는 의미임)




▶▶ [C언어 예제] 텍스트 파일 열기; 명령 프롬프트 화면에 파일 내용 출력; 도스 type 명령




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top