argc
argument count의 약자
함수 호출 시 함수에 전달되는 인자의 개수를 의미한다
argv
argumnet vector의 약자
정해지지 않은 문자열을 의미한다
TCP/IP의 예제코드를 보면 main함수 부분에 항상 등장한다
int main(int argc, char *argv[ ])
{
.......
if(argc != 3)
{
printf("Usage : %s <IP> <port> \n" , argv[0]);
}
.......
}
argc(함수 호출 시에 전달되는 인자의 개수)가 3개가 되지 않으면 argv[0](문자열)을 출력하는 코드 부분이다.
아직은 c언어에 대한 가장 쉬운 부분만 알고 있을 뿐
복잡한 함수 선언과 포인터, 스트럭처에 대해선 아는 것이 없기 때문에 보이는 내용을 해석하는 정도를 목표로 한다.
만약, 위의 코드를 리눅스 환경에서 gcc로 컴파일하고, 생성된 실행파일을 ./client 로 실행하려 하면
' Usage: ./client <IP> <port> '라는 출력이 나오면서 실행파일은 실행되지 않는다.
<IP>와 <port>에 해당하는 인자가 부족하여 함수가 호출되지 않았기 때문이다.
여기서 서식문자 %s는 argv[0]의 내용을 출력하는데, 이 내용은 ' ./client ' 이다.
따라서 함수 호출을 위해 입력한 리눅스 명령어 ' ./client '가 char *argv[ ]가 가리키는 메모리에 할당 되었다고 추측한다.