Fundamental of Software Develop 15

명령행 인자(Command-Line Arguments)

명령행(command-line)이란, 리눅스 시스템에서 프롬프트가 나타나고 커서가 사용자가 명령을 입력하는 행을 말한다. 명령행 인자(Command Line Arguments, CLA)란, 사용자가 명령을 실행할 때 해당 명령(실행파일명)과 함께 지정하는 인자를 말한다. 명령행 인자(CLA)의 전달 CLA는 자동으로 프로그램의 main()함수에 전달된다. int main(int argc, char *argv[]){ ... } main() 함수에서 CLA를 전달받으려면 위와 같이 정의해야 한다. 옵션처리 : getopt() getopt() 함수는 argv에 optstring에 지정된 옵션과 동일한 옵션 문자가 있으면 해당 문자를 리턴한다. POSIX에서 정의한 명령에 대한 기본 규칙(Basic Utilit..

동적 메모리 할당

프로그램 실행 중에 메모리 용량을 할당하고, 더이상 사용하지 않으면 해당 공간을 해제하는 것이 동적 메모리 할당이다. (JAVA, Kotlin 등 상위레벨 언어는 Garbage Collector가 사용하지 않는 메모리를 알아서 해제하여 Managed Language라 부른다.) malloc() malloc() 함수(memory allocate 함수)는 인자로 지정한 크기의 메모리를 할당하면 해당 메모리 시작주소를, 실패하면 NULL포인터를 반환한다. ※ malloc() 함수는 할당된 메모리를 초기화하지 않는다는 점 주의하자 #include void *malloc(size_t size); size : 할당 할 메모리 크기 char *ptr; ptr = malloc(sizeof(char) * 100); ma..

오류 처리 함수 : perror(), strerror()

오류 발생 시 저장되는 전역변수 errno의 상수값만으로는 오류의 의미를 파악하기 어렵다. (직접 헤더파일을 열고 해당 상수의 정의를 찾아봐야하는 번거로움이 있다) 이럴 땐, 오류 코드를 메시지로 변환하여 출력하는 perror(), strerror() 함수를 사용하면 편리하다. perror() perror() 함수는 errno에 저장된 값을 읽어, 해당 메시지를 standard error로 출력한다. #include void perror(const char *s); s : 출력할 문자열 strerror() strerror() 함수는 ANSI C에서 추가로 정의한 함수로, 함수 인자로 errno에 저장된 값을 오류메시지에 리턴한다. 이 때, 사용자가 리턴된 오류메시지를 알맞게 가공할 수 있다. #inclu..

Linux : Build System (Makefile, CMake)

Intro : C 프로그래밍 작업 순서Ⅰ. 프로그램을 작성Ⅱ. 컴파일러를 통해 컴파일 진행Ⅲ. 링크 진행Ⅳ. 실행파일 생성      Ⅰ. 프로그램 작성  자신이 구현하고자 하는 것을 C언어를 사용하여 논리적으로 작성한다.(이렇게 작성된 것을 Source-Code라 한다.)  이렇게 프로그램을 작성하는 과정을 흔히 코딩(coding)이라 한다. C/C++에서 우리가 작성한 소스 코드를 실제 실행할 수 있는 실행 파일로 변환하기 위해서는 빌드라는 과정이 필요하다.이 과정은 전처리(Preprocessing), 컴파일(Compile), 어셈블링(Assemble), 링킹(Linking) 순서로 이루어진다.     Ⅱ. 컴파일러를 통해 컴파일 진행  C언어를 이용해 작성한 코드를 컴퓨터가 이해할 수 있도록 기계어로..

시스템 호출의 오류 처리하기

시스템 프로그래밍이란? 시스템에서 제공하는 시스템 호출(시스템 함수, System Call)을 사용해 프로그램을 작성하는 것 응용 프로그램을 작성할 때엔 많은 경우에 쉽게 사용 가능한 상위레벨 함수로 프로그래밍하여, 시스템 콜 서비스를 직접 사용하지 않는다. 시스템 호출 프로그래밍 인터페이스이며, 기본 형식은 C언어의 함수와 같다. 리턴값 = 시스템 호출명(인자, ...); 라이브러리 함수 미리 컴파일된 함수를 묶어서 제공하는 특수한 형태의 파일이다. C언어는 데이터 입출력, 수학 공식, 문자열 처리 등 응용 프로그램 개발에 필요한 함수를 유형별로 분류해 라이브러리로 제공한다. 리눅스 시스템에서 보통 라이브러리는 /usr/lib 에 위치한다. 라이브러리의 이름은 대개 'lib'로 시작하고, 확장자는 .a..