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;
}
#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++)
<< Home