ecole42

libft

libft는 ecole42의 첫 번째 프로젝트로, C언어의 표준 라이브러리 함수들을 직접 구현해서 자신만의 라이브러리를 만드는 프로젝트. 이 프로젝트를 통해 기본 함수들의 동작 원리를 깊이 이해하고, 향후 프로젝트에서 활용할 수 있는 개인 라이브러리를 구축한다.

C

개요

Libft는 C 표준 라이브러리의 핵심 함수들을 직접 구현한 정적 라이브러리다. 메모리 조작, 문자열 처리, 문자 분류, 변환, 파일 입출력 등의 기능을 제공한다.

빌드 방법

make        # 라이브러리 빌드
make clean  # 오브젝트 파일 삭제
make fclean # 오브젝트 파일과 라이브러리 파일 삭제
make re     # 완전히 재빌드

빌드 후 libft.a 파일이 생성된다.

사용 방법

프로젝트에서 libft를 사용하려면:

  1. 헤더 파일 포함:
#include "libft.h"
  1. 컴파일 시 라이브러리 링크:
gcc your_program.c -L. -lft -o your_program

함수 목록

Part 1: 기본 함수

메모리 함수

  • ft_memset: 메모리 영역을 특정 값으로 설정하는 함수
  • ft_bzero: 메모리 영역을 0으로 초기화하는 함수
  • ft_memcpy: 메모리 영역을 복사하는 함수
  • ft_memccpy: 특정 문자까지 메모리를 복사하는 함수
  • ft_memmove: 메모리 영역을 이동하는 함수 (오버랩 처리)
  • ft_memchr: 메모리에서 문자를 검색하는 함수
  • ft_memcmp: 메모리 영역을 비교하는 함수
  • ft_calloc: 메모리를 할당하고 0으로 초기화하는 함수

문자열 함수

  • ft_strlen: 문자열의 길이를 계산하는 함수
  • ft_strlcpy: 문자열을 안전하게 복사하는 함수
  • ft_strlcat: 문자열을 안전하게 연결하는 함수
  • ft_strchr: 문자열에서 문자를 검색하는 함수 (앞에서)
  • ft_strrchr: 문자열에서 문자를 검색하는 함수 (뒤에서)
  • ft_strnstr: 문자열에서 부분 문자열을 검색하는 함수
  • ft_strncmp: 문자열을 비교하는 함수 (n바이트)
  • ft_strcmp: 문자열을 비교하는 함수
  • ft_strdup: 문자열을 복제하는 함수

문자 분류 함수

  • ft_isalpha: 알파벳 문자인지 확인하는 함수
  • ft_isdigit: 숫자 문자인지 확인하는 함수
  • ft_isalnum: 알파벳 또는 숫자인지 확인하는 함수
  • ft_isascii: ASCII 문자인지 확인하는 함수
  • ft_isprint: 출력 가능한 문자인지 확인하는 함수
  • ft_toupper: 소문자를 대문자로 변환하는 함수
  • ft_tolower: 대문자를 소문자로 변환하는 함수

변환 함수

  • ft_atoi: 문자열을 정수로 변환하는 함수

Part 2: 추가 함수

문자열 조작 함수

  • ft_substr: 문자열의 부분 문자열을 추출하는 함수
  • ft_strjoin: 두 문자열을 연결하는 함수
  • ft_strtrim: 문자열의 앞뒤 공백을 제거하는 함수
  • ft_split: 구분자로 문자열을 분할하는 함수
  • ft_strmapi: 문자열에 함수를 적용하여 새 문자열을 생성하는 함수

변환 함수

  • ft_itoa: 정수를 문자열로 변환하는 함수

파일 입출력 함수

  • ft_putchar_fd: 파일 디스크립터에 문자를 출력하는 함수
  • ft_putstr_fd: 파일 디스크립터에 문자열을 출력하는 함수
  • ft_putendl_fd: 파일 디스크립터에 문자열을 출력하고 개행하는 함수
  • ft_putnbr_fd: 파일 디스크립터에 숫자를 출력하는 함수

Bonus: get_next_line

  • get_next_line: 파일 디스크립터에서 한 줄씩 읽어오는 함수

파일을 한 줄씩 읽어오는 함수로, 여러 파일 디스크립터를 동시에 처리할 수 있다. 내부적으로 캐시를 사용하여 효율적으로 동작한다.

사용 예시:

int fd = open("file.txt", O_RDONLY);
char *line;

while (get_next_line(fd, &line) > 0)
{
    printf("%s\n", line);
    free(line);
}
close(fd);

주요 특징

  • 안전성: 버퍼 오버플로우를 방지하는 안전한 문자열 함수를 제공한다
  • 효율성: 최적화된 메모리 관리 및 알고리즘을 사용한다
  • 호환성: 표준 라이브러리 함수와 동일한 동작을 보장한다
  • 확장성: 추가 유틸리티 함수를 제공한다

파일 구조

libft/
├── libft.h          # 헤더 파일
├── Makefile         # 빌드 스크립트
├── ft_*.c           # 각 함수 구현 파일
└── get_next_line.c  # get_next_line 구현

주의사항

  • 동적으로 할당된 메모리는 사용 후 free()로 해제해야 한다
  • ft_split, ft_strjoin, ft_substr 등의 함수는 메모리를 할당하므로 반드시 해제해야 한다
  • get_next_line에서 반환된 line 포인터도 사용 후 해제해야 한다