ft_putnbr_fd 구현

yeonjkim·2021년 5월 24일
0

42seoul-libft

목록 보기
21/43

1. ft_putnbr_fd 용도

* 파라미터로 들어오는 fd와 int 변수 n을 이용해 n을 출력하는 함수

2. ft_putnbr_fd 프로토타입

void	ft_putnbr_fd(int n, int fd)
int n : 출력할 정수. 다만 write는 char형 변수의 주소를 이용해 출력하므로 n의 각 자릿수에 '0'을 더한 값을 출력
int fd : 파일 디스크립터. 정수값으로 파일 디스크립터를 받음.

3. 파일 디스크립터란?

  • 유닉스 시스템에서 프로세스가 특정 파일에 접근하기 위한 추상적인 키.

  • 모든 프로세스(프로그램이 메모리에 적재된 것. 프로그램의 인스턴스)가 갖추어야 하는 표준 POSIX 파일 서술자는 하단과 같다.

  • file descriptor의 값은 unsigned int 값이므로 음수가 될 수 없다.

  • 다만 실제 write함수에서 테스트해본 결과 파일 디스크립터의 숫자에 상관없이 모두 출력한다. 파일 디스크립터의 정수에 따라 무엇이 달라지는지는 더욱 알아봐야 할 것 같다.

4. 구현 시 유의사항

  • n이 -2147483648, 즉 int형 min값일 때는 n에 -1을 곱한 수가 int overflow가 발생한다. 이를 예외처리 해 주어야 한다.

  • 재귀를 이용해 코드를 구현했다. n의 각 자릿수에 '0'을 더한 값을 출력하기 위해 n의 범위를 나누어준다.

5. 코드 구현

#include "libft.h"

void    ft_putnbr_fd(int n, int fd)
{
        if (n == -2147483648)
        {
                write(fd, "-2147483648", 11);
        }
        else if (n < 0)
        {
                write(fd, "-", 1);
                ft_putnbr_fd(-n, fd);
        }
        else if (n < 10 && n >= 0)
        {
                ft_putchar_fd(n + '0', fd);
        }
        else if (n > 0)
        {
                ft_putnbr_fd(n / 10, fd);
                ft_putchar_fd(n % 10 + '0', fd);
        }
}

6. 코드 구현 방법

(1) n이 -2147483648, 즉 int형 min값인지 검사한 후, int min값이면 -2147483648을 출력한다.
(2) n이 음수이면, -를 출력한 후 다시 ft_putnbr_fd함수를 -n값과 fd를 인자로 호출한다;
(3) n이 0부터 9 사이, 즉 한 자릿수이면 '0'을 더해 출력한다.
(4) n이 0보다 크면 n을 10으로 나눈 몫과 fd를 인자로 ft_putnbr_fd 함수를 호출한다.
(5) 그 이후 n을 10으로 나눈 나머지에 '0'을 더한 값을 ft_putchar_fd 함수의 인자로 하고 함수를 호출한다.
-->재귀

0개의 댓글