Fundamental of Software Develop 13

Ubuntu20.04에서 VSCode C/C++ 개발환경 구축하기

1. 리눅스 필수 개발코드 다운로드 리눅스에서 C/C++ 등 개발툴을 컴파일하기 위한 필수 컴파일러와 유틸리티들을 설치한다. swift@swift-HP-Pavilion-dv6-Notebook-PC:~/Desktop$ sudo apt-get install build-essential [sudo] password for swift: Reading package lists... DoneBuilding dependency tree Reading state information... DoneThe following package was automatically installed and is no longer required: libllvm11Use 'sudo apt autoremove' to remo..

Overloading, Override, 다형성

1 Overloading 정말 간단하면서도 다형성을 지원하는 방법이 오버로딩(Overloading)입니다. 프로그래밍에서 Overloading이란 메소드 함수명은 같은데 전달받는 파라미터 인자 값에 의해 호출되는 메소드가 다르게 하는 것입니다.   아래의 예시를 봅시다.숫자를 더하는 프로그램을 만드는데 2개의 숫자 덧셈뿐만 아니라 3개의 숫자 덧셈까지도 가능하게 하도록 하려 합니다.  [overloading 사용 안할 시]  그렇다면 우리는 덧셈을 하는 메소드를 호출하는데 2개 숫자일 때와 3개 숫자일 때, 경우에 따라 호출해주어야 합니다.하지만 이는 매우 불필요한 작업입니다. 매개변수로 전달되는 값의 개수(x , y , z or x. y)의 값에 의해 기능이 결정되고 메소드..

Linux System Programming : 링크 파일 생성

링크 파일 생성 링크(Link)는 같은 파일이나 디렉터리에 여러 이름으로 접근할 수 있게 하는 새로운 이름을 말한다. 링크 기능을 이용하면 이전 시스템과의 호환성을 유지하거나, 경로가 복잡한 파일에 간단한 경로를 제공하는 등 편의성을 높일 수 있다. 구체적인 예시로, 루트 디렉터리 (/) 아래의 lib 디렉터리는 예전 시스템과의 호환을 위해 필요한데, 현재는 실제 디렉터리가 있는게 아니라 /usr/lib 디렉터리에 대한 심벌릭 링크로 유지하고 있다. 링크는 하드 링크와 심벌릭 링크 두 가지가 있으며, 둘 다 ln명령으로 생성한다. 프로그램에서도 함수를 사용해 하드 링크와 심벌릭 링크를 생성할 수 있다. 1. 하드 링크 (Hard Link) - 하드 링크(Hard Link)는 파일에 접근할 수 있는 파일명..

Linux System Programming : 파일 접근 권한 제어

파일 접근 권한 제어 stat 구조체의 st_mode 항목에는 파일의 종류와 접근 권한 정보가 저장된다. st_mode 항목의 값을 해석하려면 sys/stat.h파일에 정의된 상수와 매크로를 이용해야 한다. st_mode의 구조 먼저, st_mode 항목에 저장되는 값의 구조를 알아야 상수와 매크로의 역할을 이해할 수 있다. (st_mode: 파일의 종류와 접근권한 정보) st_mode 항목의 데이터형인 mode_t는 unsigned int로 정의되어 실제로 16비트를 사용한다. buf - 파일의 상태 및 정보를 저장할 buf 구조체 struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ ..

Linux System Programming: 파일 정보 검색

inode로부터 검색할 수 있는 정보는 파일의 종류, 접근 권한, 하드 링크 개수, 소유자의 UID와 GID, 파일의 크기, 파일 접근 시각, 파일 수정 시각, 파일의 inode 변경 시각 등이다. inode 정보를 검색하면 sys/stat.h 파일에 정의되어 있는 stat 구조체에 저장된다. 파일 정보 검색 함수 기능 함수 파일 정보 검색 함수 int stat(const char * pathname, struct stat *statbuf); int fstat(int fd, struct stat *statbuf); 파일 접근 권한 함수 기능 함수 파일 접근 권한 확인 int access(const char *pathname, int mode); 파일 접근 권한 변경 int chmod(const char ..

디렉터리 내용 읽기

디렉터리 내용 읽기 디렉터리의 내용을 읽으려면 해당 디렉터리를 열고 정보를 읽을 수 있어야 한다. 디렉터리 열기 : opendir() - opendir() 함수는 인자로 지정된 디렉터리를 열고 해당 디렉터리에 대한 디렉터리 스트림을 생성, 이 스트림의 포인터를 리턴한다. #include #include DIR *opendir(const char *name); name : 열고자 하는 디렉터리 명 DIR 객체(opendir() 함수가 디렉터리 열기에 성공하면 반환하는)에는 열린 디렉터리에 정보가 있으며, dirent.h 파일에 typedef struct__dirstream DIR로 정의되어있다. opendir() 함수는 실패하면 NULL을 반환한다. 디렉터리 닫기 : closedir() - 인자로 지정한 ..

디렉터리 관리하기 (위치 검색, 이름 변경, 이동)

현재 작업 디렉터리의 위치 검색 : getcwd(), get_current_dir_name() 현재 작업 디렉터리의 위치를 파악할 때 사용하는 함수는 getcwd(), get_current_dir_name(), getwd()이다. 이 중, getcwd(), get_current_dir_name() 함수에 대해 알아보자. (※ 현재 디렉터리의 위치를 검색할 때 쓰는 명령어는 pwd이다.) 현재 작업 디렉터리 위치 검색 (1) : getcwd() getcwd() 함수는 현재 디렉터리의 절대 경로를 리턴한다. #include char *getcwd(char *buf, size_t size); buf : 현재 디렉터리의 절대 경로를 저장할 버퍼 주소, size : 버퍼의 크기 함수 인자를 지정하는 방법은 아래 ..

디렉터리 생성과 삭제 : mkdir(), rmdir()

man 명령어로 mkdir() 혹은 rmdir() 함수를 검색할 때에는, Linux 명령어인 mkdir, rmdir과 이름이 같으므로 $ man -s 2를 사용해야 한다. 디렉터리 생성 : mkdir() mkdir() 함수는 생성하려는 디렉터리명을 포함한 경로를 받고, 생성하는 디렉터리의 기본 접근 권한을 지정한다. 디렉터리 생성에 성공하면 0을, 실패하면 -1을 반환한다. #include #include int mkdir(const char *pathname, mode_t mode); pathname : 디렉터리가 포함된 경로, mode : 접근 권한 디렉터리 삭제 : rmdir() rmdir()함수는 디렉터리를 삭제하는 명령어인 rmdir과 동일한 기능을 수행한다. rmdir() 함수로 삭제하려는 디..

명령행 인자(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..