분류 전체보기 170

디렉터리 생성과 삭제 : 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() 함수로 삭제하려는 디..

리눅스(Linux)의 디렉터리(Directory)

리눅스에서는 모든 것을 파일로 다룬다.  먼저, 데이터(ex. 문서, 이미지, 영상, 프로그램 등)들이 파일로 보존된다.또한, 리눅스에서는 디렉터리도 파일의 한 종류로 다루며, 심지어 시스템을 구성하는 장치들(ex. HDD, 키보드, 프린터 등) 조차도 파일로 취급한다.   리눅스에서의 파일 종류리눅스에서는 파일을 일반 파일과 특수 파일, 그리고 디렉터리로 구분한다.   일반 파일  텍스트파일, 실행 파일 등 텍스트나 바이너리 형태의 데이터를 저장하고 있는 파일   장치 파일  장치를 구동하는데 사용되며, 장치 관련 특수 파일을 다른 파일과 구분하여 장치 파일(device file)이라고도 한다. 디렉터리는 해당 디렉터리에 속한 파일을 관리하는 특별한 파일이다.    ..

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

Makefile과 Make

Linux System에서는 여러 개의 .c 파일을 컴파일&링크하여 하나의 실행 파일로 생성하는 데 사용하는 Tool로 Makefile과 make명령을 제공한다. Makefile 컴파일 명령, 소스파일을 컴파일 하는 방법, 링크할 파일, 실행 파일명 등을 설정하는 파일 Make 명령 Makefile을 읽고, 작성된 내용대로 컴파일을 실행하여 실행 파일을 생성한다. 리눅스에 make가 설치되어있지 않은 경우, Ubuntu Linux는 아래와 같이 먼저 make를 설치한다. $ sudo apt install make make명령 사용하기

유닉스(UNIX)와 리눅스(Linux)의 발전 과정

리눅스는 유닉스 표준에 기반하고 있으므로, 유닉스의 발전 과정과 관련 표준을 간략하게 살펴보자. 유닉스(UNIX)는 1969년에 미국의 통신 회사인 AT&T 산하의 벨 연구소에서 켄 톰슨(Ken Thompson)과 데니스 리치(Dennis Ritchie)가 개발한 운영체제이다. 처음엔 기존 운영체제처럼 어셈블리어로 개발하였으나, 데니스 리치가 개발한 C언어를 사용해 1973년에 다시 만들면서 고급 언어(High-Level Language)로 작성한 최초의 운영체제가 되었다. 유닉스는 초기에 소스 코드가 공개되어 대학교나 기업에서 쉽게 이용할 수 있었고, 이에 따라 다양한 기능이 추가되었다. 이 후에, AT&T의 상용 유닉스(시스템V)와 버클리 대학교(U.C.Berkeley)의 BSD(Berkele..

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

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

HAL (Hardware Abstraction Layer : 하드웨어 추상화 계층)

하드웨어 추상화(Hardware Abstraction) 하드웨어 추상화(hardware abstraction)는 특정 플랫폼의 구체적인 부분과 하드웨어의 자원을 직접 접근을 흉내내는 소프트웨어들의 집합이다. 하드웨어 추상화는 프로그램 인터페이스를 통해 하드웨어 리소스에 대한 액세스 권한을 프로그램에 제공한다. 프로그래머가 장치 독립적인 프로그램을 작성하도록 하고 운영 체제의 하드웨어 호출을 무시함으로써 고성능의 응용 프로그램 작성을 허용한다 하드웨어 추상화 계층 (HAL, Hardware Abstraction Layer) 컴퓨터에서 프로그램이 수많은 하드웨어를 별 차이 없이 다룰 수 있도록 하는 추상화 계층으로, OS가 컴퓨터 하드웨어와 소프트웨어 사이에 만들어주는 가교 역할을 한다. API처럼 사용하며..

Kernel이 하는 일

Kernel : 다양한 CPU, 메모리, 장치들을 관리한다. 1) Task(Process) Management : CPU를 추상적 자원인 Task로 제공 - 아래는 커널 소스로 실제 구현되어있음 2) Memory Management : 메모리를 추상적 자원인 Page, Segement로 제공 3) File System : 디스크를 추상적 자원인 File로 제공 4) Network Management : 네트워크 장치를 추상적 자원인 Socket으로 제공 5) Device Driver Management : 각종 외부 장치에 대한 접근 6) Interrupt Handling : 인터럽트 핸들러 7) I/O Communication : 입출력 통신 관리 (입출력 장치의 중개자)