Как использовать syscall write вместо printf - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь использовать системный вызов write только 1 раз, чтобы напечатать треугольник Паскаля. Я уже сделал функцию, но я сделал это, используя printf. Я хотел бы использовать буфер, но я борюсь. Вот мой код:

#include <stdio.h>
#include <stddef.h>
#include <unistd.h>

int coeff(unsigned int nb, unsigned int i)
{
    unsigned int save = 1;
    if (i > nb - i)
    {
        i = nb - i;
    }
    for (unsigned int p = 0; p < i; p++)
    {
        save = save * (nb - p);
        save /= (p + 1);
    }
    return save;
}

void pascal(unsigned int nb)
{
    for (unsigned int line = 0; line <= nb; line++)
    {
        for (unsigned int i = 0; i <= line; i++)
        {
            printf("%d ", coeff(line, i));
        }
        printf("\n");
    }
}

1 Ответ

0 голосов
/ 23 октября 2019

man 2 write

SYNOPSIS
#include <unistd.h>

ssize_t write (int fd, const void * buf, size_t count);

Первый аргумент - дескриптор файла. В POSIX мы можем найти 3 стандартных файловых дескриптора:

  • fd = 0 (стандартный) ака STDIN_FILENO
  • fd = 1 (стандартный вывод) или STDOUT_FILENO
  • fd = 2 (stderr) aka STDERR_FILENO

Мы хотим записать в stdout.

Второй аргумент - это ваша строка, которую вы хотите напечатать, и считатьразмер строки печати. ​​

Маленький пример:

#include <unistd.h>
#include <string.h>

void main (void) {
    const char * string = "test";

    write(1, string, strlen(string));
}
...