man
을 한번씩 확인하여 설명을 읽고 함수의 원본과 동일한 프로토타입 및 기능을 수행하는 코드 작성 필요
//#include "libft.h"
void ft_putchar_fd(char c, int fd)
- 문자
c
출력 함수
char c
: 출력할 문자
int fd
: 출력에 사용할 파일 디스크립터
void 함수에 return ?
open()
함수는 다음과 같이 사용하기 때문에,fd=open("data.txt", O_RDONLY)
파일 오픈에 실패하면 file descriptor
는 음수값을 갖게 된다. 이 때 '함수의 종결'을 의미하는 return ;
사용한다.그래서 fd
가 음수 인지 확인 필요
//#include "libft.h"
void ft_putstr_fd(char *s, int fd);
- 문자열
s
출력 함수
char *s
: 출력할 문자열
int fd
: 출력에 사용할 파일 디스크립터
-fd
가 음수 인지 확인 필요
s
비어있는 경우 예외처리//#include "libft.h"
void ft_putendl_fd(char *s, int fd);
- 문자열
s
출력하고 줄바꿈하기
char *s
: 출력할 문자열
int fd
: 출력에 사용할 파일 디스크립터
-fd
가 음수 인지 확인 필요
s
비어있는 경우 예외처리//#include "libft.h"
void ft_putnbr_fd(int n, int fd);
- 정수
n
출력하기
int n
: 출력할 정수
int fd
: 출력에 사용할 파일 디스크립터
-fd
가 음수 인지 확인 필요
char *ft_itoa(int n)
- 정수를 문자열로 변환하여 변환
int n
: 문자열로 변환할 정수char *ft_strjoin(char const *s1, char const *s2)
- 입력받은 두 개의 문자열을 연결한 새로운 문자열을 반환하는 함수
char const *s1
: 앞에 올 문자열의 시작 주소char const *s2
: 뒤에 올 문자열의 시작 주소s == 0;
과 s[0] = '\0';
의 차이.
char * s = "" <- 이건 빈문자열
char *s = NULL <- 이건 그냥 s포인터가 가르키는게 없는 것(NULL 인거)
s를 리턴 받았을 때,
전자는 s[0] == '\0' 이라서 문자열의 끝이 바로 검색되고
후자는 s[0] 값 자체를 보려고하면 세그먼트 폴트가 뜬다.
char *ft_substr(char const *s, unsigned int start, size_t len)
/* 사용 방법 */
ft_substr("aaba", 2, 1); // 결과 : "b"
ft_substr("aaa", -, 0); // 결과 : 0이 들어간 문자열 ""
ft_substr("aaaa", 6, -); // 결과 : 0이 들어간 문자열 ""
- 지정된 문자열을 범위를 새로운 문자열에 복사하여 반환
char const *s
: 하위 문자열을 생성할 문자열의 시작 포인터(주소)
unsigned int start
: 하위 문자열의 시작 인덱스
size_t len
: 하위 문자열의 최대 길이
len(s) < start
일때 빈문자열을 반환char *ft_strtrim(const char *s1, const char *set)
/* 사용 방법 */
ft_strtrim("abcdaddbabc", "abc"); // 결과 : "dadd"
ft_strtrim("abcabababc", "abc"); // 결과 : ""
ft_strtrim("dddfgggdd", "abc"); // 결과 : "dddfgggdd"
ft_strtrim("", "abc"); // 결과 : NULL
ft_strtrim("ABCCBA", "AB"); // 결과 : "CC"
ft_strtrim("ACCBACBA", "abcAB"); // 결과 : "CCBAC"
ft_strtrim("Hello World!", "Hlde");// 결과 : "o World!
- 문자열 s1 의 처음과 끝에서 set 문자열에 포함되어 있는 문자가 연속적으로 존재할 경우, 문자를 제거해준 새 문자열을 만들어 반환
✔️ Description
char const *s1
: 제거될 문자열char const *set
: 제거할 참조 문자의 집합- 보통 문자열 앞뒤 공백이 있는 문자열에서 공백제거를 위해 사용한다고 함
- strltrim : 왼쪽 set 제거
- strrtrim : 오른쪽 set 제거
✔️ Return
- 성공 시 문자가 제거된 새 문자열을 반환
- 할당 실패 시 NULL을 반환
✔️ !! Notice
- 문자열
s1
이 비어있을 때, NULL을 반환- 찾을 문자
set
이 비어있을 때, 문자열s1
을 새로 할당해서 반환- 문자열
s1
이 모두set
에 포함된 문자일 경우, 빈 문자열 ("") 을 할당하여 반환- end
char **ft_split(char const *s, char c)
- 문자
c
를 기준으로 문자열s
를 분리하여 배열을 만드는 함수✔️ Description
char const *s
: 분할할 문자열의 시작 포인터(주소)char c
: 구분 문자
s
를 문자 c
기준으로 나눈 개수를 구하여 이중 포인터로 널 문자를 포함한 공간을 할당s
를 문자 c
기준으로 나눈 개수만큼 반복하면서 나눈 문자열 길이만큼 메모리를 할당free
하고 0
으로 초기화 해야 한다.0
을 넣어주어야 함.s1
이 비어있을 경우, NULL을 반환char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
- 문자열 s의 각 문자에 f함수를 연속적으로 적용시킨 새로운 문자열 반환
✔️ Description
s
: 처리할 문자열(*f)
: 문자열을 처리할 함수
리턴값- s의 길이를 재서 s 길이 + 1만큼 result에 malloc해주고, result의 요소 각각에 (*f)(i, s[i])한 결과를 담은 뒤, 마지막을 null terminating 해준다.
✔️ Return
- (*f)(i, s[i]) 한 결과들을 포인터 배열에 담아서 반환
- 할당 실패시 NULL
s
이나*f
가 NULL로 들어오는 경우를 예외로 처리하여 0을 반환✔️ !! Notice
- 함수 포인터에 대한 이해 필요
void ft_striteri(char *s, void (*f)(unsigned int, char *))
s
: 처리할 문자열(*f)
: 문자열을 처리할 함수s
의 첫 주소와 첫 인텍스 값부터 문자열 끝까지 (*f)
에 인자값으로 전달하라고 함.
파일 디스크립터(File Descriptor)란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값이다. 파일 디스크럽터는 일반적으로 0이 아닌 정수값을 갖는다.
흔히 유닉스 시스템에서 모든 것을 파일이라고 한다. 일반적인 정규파일부터 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다. 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 파일 디스크립터라는 개념일 이용한다. 프로세스가 실행 중에 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭할 수 있다.
프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일디스크립터는 표준입력(Standard Input), 표준 출력(Standard Output), 표준에러(Standard Error)이며 이들에게 각각 0, 1, 2라는 정수가 할당된다.
-1 : 실패
0 : Standard Input (표준 입력)
1 : Standard Ouput (표준 출력) (화면출력)
2 : Standard Error (표준 에러 출력)
3~ : open함수를 통해 처음 열면 3번부터 fd가 순차적으로 할당
참고_1
참고_2
파일열기 open
c언어 파일 입출력
write