Fundamental of Software Develop/: : Linux System Programming

명령행 인자(Command-Line Arguments)

Jay.P Morgan 2023. 11. 9. 23:50

명령행(command-line)이란, 리눅스 시스템에서 프롬프트가 나타나고 커서가 사용자가 명령을 입력하는 행을 말한다.

명령행 인자(Command Line Arguments, CLA)란, 사용자가 명령을 실행할 때 해당 명령(실행파일명)과 함께 지정하는 인자를 말한다.

 

  명령행 인자(CLA)의 전달

  CLA는 자동으로 프로그램의 main()함수에 전달된다.

int main(int argc, char *argv[]){
			   ...
}

    main() 함수에서 CLA를 전달받으려면 위와 같이 정의해야 한다.

터미널에서 [apt-get install git flex libssl-dev ...] 처럼 한 문장으로 여러 프로그램 설치가 가능하며, gcc 등 프로그램에서도 Comand-Line에 다양한 옵션이 가능

 

 

  옵션처리 : getopt()

  getopt() 함수는 argv에 optstring에 지정된 옵션과 동일한 옵션 문자가 있으면 해당 문자를 리턴한다.

 

POSIX에서 정의한 명령에 대한 기본 규칙(Basic Utility Syntax Guideline)을 준수해서 명령행 인자(CLA)를 입력해야, getopt() 함수로 옵션을 처리할 수 있다.

 

아래는 POSIX에서 정의한 명령에 대한 기본 규칙(Basic Utility Syntax Guideline) 입니다.

Guideline 1:
유틸리티 이름은 2~9자 사이여야 합니다.

Guideline 2:
유틸리티 이름에는 소문자(하위 문자 분류)와 이식 가능한 문자 집합의 숫자만 포함되어야 합니다.

Guideline 3:
각 옵션 이름은 이식 가능한 문자 집합에 있는 단일 영숫자 문자(숫자 문자 분류)여야 합니다.
-W(capital-W) 옵션은 공급업체 옵션용으로 예약되어 있습니다.
여러 자리 옵션은 허용되지 않습니다.

Guideline 4:
모든 옵션 앞에는 '-' 구분 기호 문자가 와야 합니다.

Guideline 5:
옵션 인수가 없는 하나 이상의 옵션과 옵션 인수를 취하는 최대 하나의 옵션이 하나의 '-' 구분 기호 뒤에 그룹화되면허용되어야 합니다.

Guideline 6:
각 옵션과 옵션 인수는 유틸리티 인수 구문, 항목 (2)에 명시된 경우를 제외하고 별도의 인수여야 합니다.

Guideline 7:
옵션 인수는 선택사항이 아니어야 합니다.

Guideline 8:
단일 옵션 뒤에 여러 옵션 인수가 지정되는 경우 
해당 인수 내의 <쉼표> 문자 또는 해당 인수 내의 <공백> 문자를 사용하여 단일 인수로 표시해야 합니다.

Guideline 9:
모든 옵션은 명령줄에서 피연산자 앞에 와야 합니다.

Guideline 10:
option-argument가 아닌 첫 번째 -- 인수는 옵션의 끝을 나타내는 구분 기호로 허용되어야 합니다. 
다음 인수는 '-' 문자로 시작하더라도 피연산자로 처리되어야 합니다.

Guideline 11:
옵션이 상호 배타적이라고 문서화되어 있지 않고 해당 옵션이 이전의 호환되지 않는 옵션을 재정의하도록 문서화되어 있지
않는 한 서로 다른 옵션의 순서는 중요하지 않습니다. 
옵션-인수를 갖는 옵션이 반복되는 경우 옵션과 옵션-인수 조합은 명령줄에 지정된 순서대로 해석되어야 합니다.

Guideline 12:
피연산자의 순서가 중요할 수 있으며 위치 관련 해석은 유틸리티별로 결정되어야 합니다.

Guideline 13:
피연산자를 사용하여 읽기 또는 쓰기용으로 열 파일을 나타내는 유틸리티의 경우,
'-' 피연산자는 표준 입력(또는 출력 파일이 지정되고 있다는 것이 문맥상 분명할 경우 표준 출력) 또는 -라는 파일명.

Guideline 14:
인수가 지침 3~10에 따라 옵션으로 식별되거나 
하나의 '-' 구분 기호 뒤에 옵션 인수가 없는 옵션 그룹으로 식별될 수 있는 경우
인수는 그렇게 처리되어야 합니다.