출력 관련 함수 : ft_putchar_fd, ft_putstr_fd, ft_putendl_fd, ft_putnbr_fd

dqQQQ

·

2023. 11. 25. 12:25

개요

출력에 관련된 함수를 살펴보겠습니다.


ft_putchar_fd


SYNOPSIS

  • 함수 원형 : void ft_putchar_fd(char c, int fd)
  • char c : 출력할 문자
  • int fd : 파일 디스크립터

 

DESCRIPTION

파일 디스크립터에 따라서 문자를 출력

 

ft_putchar_fd CODE

void    ft_putchar_fd(char c, int fd)
{
    write(fd, &c, 1);
}

write함수를 사용하려면 <unistd.h> 헤더파일을 포함해야한다.

write (파일 디스크립터, 출력할 버퍼의 포인터, 출력할 개수);

간단하게 얘기하며 파일 디스크립터에 버퍼를 정해준 개수만큼 기록한다

자세한건 다음 과제인 ft_printf과제에서 다루도록 하겠다.




ft_putstr_fd


SYNOPSIS

  • 함수 원형 : void ft_putstr_fd(char *s, int fd)
  • char *s : 출력할 문자열
  • int fd : 파일 디스크립터

 

DESCRIPTION

파일 디스크립터에 따라서 문자열을 출력

 

ft_putstr_fd CODE

void    ft_putstr_fd(char *s, int fd)
{
    if (!s || fd < 0)
        return ;
    while (*s)
    {
        write(fd, s, 1);
        s++;
    }
}

딱히 설명할게 없는것 같다.




ft_putendl_fd


SYNOPSIS

  • 함수 원형 : void ft_putendl_fd(char *s, int fd)
  • char *s : 출력할 문자열
  • int fd : 파일 디스크립터

 

DESCRIPTION

파일 디스크립터에 따라서 문자열을 출력하고 개행

 

ft_putendl_fd CODE

void    ft_putendl_fd(char *s, int fd)
{
    if (!s || fd < 0)
        return ;
    while (*s)
    {
        write(fd, s, 1);
        s++;
    }
    write(fd, "\n", 1);
}

딱히 설명할게 없는것 같다.




ft_putnbr_fd


SYNOPSIS

  • 함수 원형 : void ft_putnbr_fd(int n, int fd)
  • int n : 출력할 정수
  • int fd : 파일 디스크립터

 

DESCRIPTION

파일 디스크립터에 따라서 정수를 출력

 

ft_putchar_fd CODE

void    ft_putnbr_fd(int n, int fd)
{
    char    num;

    if (n == -2147483648)
    {
        write(fd, "-2147483648", 11);
        return ;
    }
    if (n < 0)
    {
        n *= -1;
        write(fd, "-", 1);
    }
    if (n <= 9)
    {
        num = '0' + n;
        write(fd, &num, 1);
    }
    else
    {
        ft_putnbr_fd(n / 10, fd);
        ft_putnbr_fd(n % 10, fd);
    }
}

write은 문자열을 출력하므로 정수를 문자열로 변환한 다음 출력한다.

변환을 위해서 재귀함수를 이용했다.

음수가 들어오면 양수로 변환하여 처리할 것이다.

2147483648은 int범위를 벗어나므로 따로 출력을 해준다.

한자리수가 될때까지 재귀가 돌고 한자리수씩 출력을 진행한다.



3줄 요약

1. 이~지

2. write의 파일디스크립터 개념을 알려면 운영체제에 대한 개념이 필요해보인다.

3. printf가 굉장히 편한거였다. cout도 printf보다 편한데 빨리 다음 과제해서 printf쓰고싶다.