C언어를 조금 공부했거나 C언어 프로그래밍을 조금 해본 사람들은 다음과 같은 메인함수 형태를 본 적이 있을 것이다.
int main(int argc, char *argv[]){
...
}
밑줄친 부분이 바로 오늘 살피고자 하는 부분이다.
간단하게 말하면 agrc는 메인 함수로 전달받은 인자의 개수이고, argv는 전달받는 인자 즉 문자열이라고 보면 된다.
리눅스 환경은 CLI(Command line interface)로서 쉘상에서 유저가 입력한 명령어를 한 줄씩 수행하는 환경이다. 우리는 리눅스 환경에서 gcc(혹은 cc)명령어로 .c 파일을 컴파일 하고, a.out혹은 사용자가 지정한 이름의 실행 파일 이름을 입력시켜서 프로그램을 시작한다.
설명의 용이함을 위해서 예를 들어보자
gcc -o hello hello.c
위와 같은 명령어를 입력하면 hello.c가 hello 라는 이름으로 컴파일되서 그 이름으로 프로그램을 실행 시킬수 있다. (우리가 알고 있는 .exe 와 같은 파일을 생성한 것이라고 보면 된다.) 앞에서 메인 함수로 인자를 전달한다고 했는데 프로그램을 실행 시키면서 같이 명령어를 써주는 것이 인자가 되는 것이다.
예 -> hello my name is J(실행파일 + 인자)
실행 파일 이후로 빈칸이 기준이되어서 각각의 인자로 인식한다. 즉 argv[argc] => argv[4]가 되고 arg[0]은 hello가 되는 것이다.
*예제
#include <stdio.h> // echoarg.c
int main(int argc, char *argv[]) {
int i;
for (i = 0; i < argc; i++) /* echo all command-line args */
printf("argv[%d]: %s\n", i, argv[i]);
exit(0);
}
각각의 argv에 명령어 한 줄에 입력한 인자를 순서대로 보여주는것을 확일할 수 있다.
'Linux/UNIX' 카테고리의 다른 글
리눅스/유닉스의 시스템 구조(커널과 쉘) (0) | 2012.12.16 |
---|---|
프로세스 종료 exit() _exit() atexit() (1) | 2012.11.21 |
signal() 함수 (0) | 2012.11.10 |
strtol() - 정수문자열을 진수를 선택하여 정수로 반환 (0) | 2012.11.07 |
파일 허가권(File Permissions)과 UID(user id) (0) | 2012.11.07 |