int main(int argc, char *argv[]) 함수는 윈도우나 리눅스 같은 OS 명령 프롬프트를 이용해 인자를 전달해서 작동할 수 있도록 한다.
main 함수의 매개변수를 넘겨줌으로써 원하는 실행결과를 도출하고자 한다.
1. int argc
argc = argument count
argc는 운영체제가 이 프로그램을 실행했을 때 전달되는 인수의 갯수
즉 main()함수에 전달되는 데이터의 갯수를 의미
2. char *argv[]
argv = argument variable
char *argv[]는 문자열의 주소를 저장하는 포인터 배열
argv[0]은 프로그램의 실행경로
argv[1], argv[2]... 에는 순서대로 사용자가 입력한 argument가 저장됨
예를 들어, int main(int argc, char *argv[])에 ./tiny 8000 aaa이라는 입력을 준다면,
argc는 2개일 것이고, argv[0]에는 실행경로인 ./tiny가 들어가고, argv[1]에는 8000이 들어가고, argv[2]에는 aaa가 들어갈 것이다.
=> argv의 각 인자는 띄어쓰기로 구분된다.
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
int i;
for (i = 0 ; i < argc ; i++)
printf("argv[%d] : %s\n", i, argv[i]);
exit(0);
}
실행 파일 만들고 ./arg_test I AM HYUNAH
라고 실행하면
argv[0]: ./arg_test
argv[1]: I
argv[2]: AM
argv[3]: HYUNAH
1. 파일 이름을 인자로 받아 해당 파일을 읽어오고 싶을 때
./test.exe input.txt 로 프로그램을 실행시킨다면 argv[1]에 "input.txt"가 들어가게 되는데,
내가 인자로 넘겨준 파일을 읽어올 수 있도록 코딩하는 것이다.
2. 현재 프로그램이 개발모드인지 프로덕션 모드인지 구분하고 싶을 때
개발을 하다보면 디버깅을 해야하는 부분이 있다. 매번 디버깅용 코드를 넣었다 프로덕션용으로 디플로이를 할 때
디버깅 코드를 지우면 귀찮으니 프로그램을 실행할 때 인자로 현재 개발모드라는 것을 알려주는 용도로 사용하는 것이다.
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
if (argc >= 2 && !strcmp(argv[1], "development")){
puts("Development mode !");
} else {
puts("Production mode !");
}
}
출처: https://bo5mi.tistory.com/165
출처: https://almond0115.tistory.com/entry/main함수-매개변수-argc와-argv
'SKKU SW > Operating System' 카테고리의 다른 글
[OS] [Linux / UNIX] sync, fsync 함수 (1) | 2024.06.09 |
---|---|
[OS] Anonymous pipe와 Named pipe (0) | 2024.06.07 |
[OS] Multiprocessor Scheduling - SQMS와 MQMS (1) | 2024.04.06 |
[OS] Multiprocessor Scheduling(1) - Cache Coherence(캐시 일관성) & Bus snooping(버스 스누핑) (2) | 2024.03.26 |
[OS] System call 시스템 콜 (0) | 2024.03.25 |