Chapter 1 Foreword 우리는 간단한 2D게임을 mlx라이브러리를 활용하여 만들어야 한다. 2D게임을 만들기 위해선, 맵 타일, 타일셋, 스프라이트, 스프라이트 시트 등이 필요하다. 이곳에 그런게 있으니 참고하면 좋다. 다른 픽셀아트 사이트도 둘러보길 바란다. Chapter 2 Goals so_long을 통해 그래픽 디자인 프로젝트를 해볼 수 있고, 창 띄우기, 색상, 이벤트 설정하기, 모양 채우기 등과 같은 분야에서 능력이 향상 될 것이다. Chapter 3 Common Instructions mlx 라이브러리에 대해 알아야한다. so_long에서 주로 사용하는 mlx라이브러리 함수는 다음과 같다. mlx_init mlx_new_window mlx_xpm_file_to_image mlx_pu..
Chapter 1 Foreword UNIX 대화식, 시분할처리 시스템용 운영체제이다. 오늘날의 유닉스 시스템은 다양한 운영체제를 만드는 데 활용되고 있다. 현재는 많이 줄어들었지만, 대표적으로 macOS가 남아있다. 유닉스는 C언어로 작성되어, 다양한 플랫폼에 이식이 가능하고, 오픈 소스로 누구나 사용할 수 있다. 그리고 여러 사용자가 동시에 사용 가능하며, 여러 프로그램도 동시에 실행될 수 있고, 이를 관리하는 su(super user)가 존재한다. 유닉스의 구조는 커널, 쉘 등으로 구분할 수 있다. 커널(Kernel) 유닉스 운영체제의 핵심 컴퓨터의 모든 자원을 관리하는 핵심 프로그램 파일 시스템 관리 장치 관리 프로세스 관리 메모리 관리 쉘(Shell) 사용자 인터페이스 사용자와 커널 사이의 중간자..
Chapter 1 Introduction push_swap 과제는 정렬해야하는 int값들과 두개의 스택, 스택을 조작하는 명령어 집합이 주어진다. 이 때, 최소한의 명령어들을 이용하여 int형 인자들을 정렬하는 방법을 계산하고, 사용된 명령어들을 표준 출력해야 한다. Chapter 2 정렬 알고리즘을 사용하면 복잡도라는 개념을 마주하게 된다. 여기서 복잡도란 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다. 알고리즘에서의 시간복잡도는 주로 빅-오(Big-O) 표기법을 사용하는데, 이 표기법은 낮은 차수의 항을 제외시키는 방법이다. 예를 들면 크기 n의 모든 입력에 대한 알고리즘에 필요한 시간이 최대 5n^3 + 3n이라면 이 알고리즘의 시간복잡도는 O(n^3)이라고 할 수 있다. 시간복잡도는..
Chapter 1 그 동안 사용할 수 없었던 printf를 직접 구현하여 사용하게 된다. printf 구현 시 가변 인자 함수를 배울 수 있다. 가변 인자 함수 함수를 만들 때 인자가 몇 개가 들어올 지 모를 때 사용한다. 기본적으로 하나의 인자는 포함되어야 사용할 수 있다. int ft_printf(const char *format, ...) stdarg.h 가변 인자를 사용하기 위해서는 위와 같은 헤더를 포함시켜준다. va_list 현재 매개인자의 주소를 저장하는 타입 1바이트 단위로 이동하기 위해서 va_list의 실제 타입은 char * 으로 사용되며 이는 va_arg에서의 포인터 연산에 활용된다. (__GNUC__ && __GNUC__ >= 3 에서는 컴파일러 별도의 타입을 사용..) 보통 해당..
Chapter 1 Goals 이 프로젝트는 당신의 콜렉션(아마 라이브러리)에 아주 편리한 함수를 추가하게 할 뿐만 아니라, C 프로그래밍에 있어서 아주 흥미롭고 새로운 개념인 '정적 변수'를 배울 수 있도록 도울 것입니다. 정적 변수(Static Variable) 정적변수는 함수 내부에서도 사용 가능하고, 전역에서도 사용 가능하다. 정적변수는 초기화해주지 않아도 0으로 초기화 된다. 내부에서 선언한 정적변수는 함수를 여러번 호출해도 한번만 초기화된다. Chapter 2 Common Instructions makefile은 만들 필요가 없다. 메모리 누수를 신경 써야 한다. 보너스 파트를 linked-list로 할 것이라면 더더욱. Chapter 3 Mandatory part 함수 이름 get_next_l..
Mandatory part 서버 설정 운영체제 Debian 운영체제 시작 시 AppArmor 또한 구동되어야 함. Debian vs CentOS 패키지와 패키지 포멧이 다름 (debian : DEB(패키지 포멧), DPKG, API(패키지) / centOS : RPM(패키지 포멧), YUM, DNF(패키지)) 커널운영체제가 수행하는 모든 것이 저장 되어 있음 하드웨어의 모든 주요 기능을 제어함 운영체제의 주요 구성 요소 LVM을 이용한 최소 2개의 암호화된 파티션 생성 LVM(Logical Volume Manager)은 하나의 디스크를 논리적으로 나누어 사용하거나, 여러개의 디스크를 논리적으로 묶어서 사용하는 등, 리눅스에서 디스크를 효율적으로 관리하기 위한 방법. LVM에는 크게 PV, PE, VG, ..
나만의 라이브러리 만들기 향후 42seoul 본과정에서 계속 쓰일 함수들을 만들고, 모듈화 시켜서 지속적으로 사용하게 된다. 모든것을 자기 손으로 직접 만들어보라는 42의 뜻이지 않을까 싶다. 웬만한 것들은 라피신 기간동안 했던 것들이나, 조금씩 달라지거나 아예 처음 만들어야하는 함수들도 있었다. 그것들 위주로 소개해보려 한다. 0. Makefile Makefile은 프로그램을 관리하는 프로그램이고 특정 프로그램의 일정 부분이 수정되어 다시 컴파일이 필요할 경우, 간편하게 해주는 프로그램이다. libft 과제의 경우, libft.a라는 정적 라이브러리를 만들 때 Makefile이 필요하다고 한다. 라이브러리를 만들기 위해서는 목적파일들이 있어야하고, 이 목적 파일들을 하나로 묶어주는 작업이 필요하다. 우..