Поддержка множественный дескриптор файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здраствуйте! Помогите доделать функцию под поддержку множественого файл дискриптора. Сама функция построчно считывает. Проблема возникает при увилечение буфера больше 2.
#include "get_next_line.h"
 
static  int     ft_read(char **str, int fd)
{
    int     ret;
    char    *s;
    char    *buff;
 
    buff = ft_strnew(BUFF_SIZE);
    if ((ret = read(fd, buff, BUFF_SIZE)) == -1)
        return (-1);
    buff[ret] = '\0';
    s = *str;
    *str = ft_strjoin(*str, buff);
    ft_strdel(&buff);
    if (*s != 0)
        ft_strdel(&s);
    return (ret);
}
 
static  int     ft_get_line(char **str, char **line, char *s)
{
    int     i;
    char    *join;
 
    i = 0;
    if (*s == '\n')
        i = 1;
    *s = 0;
    *line = ft_strjoin("", *str);
    if (i == 0 && ft_strlen(*str) != 0)
    {
        *str = ft_strnew(1);
        return (1);
    }
    else if (i == 0 && !(ft_strlen(*str)))
        return (0);
    join = *str;
    *str = ft_strjoin(s + 1, "");
    free(join);
    return (i);
}
 
int             get_next_line(const int fd, char **line)
{
    int             ret;
    char            *s;
    static char     *str;
 
    if (str == 0)
        str = "";
    if (!line || BUFF_SIZE < 1)
        return (-1);
    ret = BUFF_SIZE;
    while (line)
    {
        s = str;
        while (*s || ret < BUFF_SIZE)
        {
            if (*s == '\n' || *s == 0 || *s == -1)
                return (ft_get_line(&str, line, s));
            s++;
        }
        ret = ft_read(&str, fd);
        if (ret == -1)
            return (-1);
    }
    return (0);
}
#ifndef GET_NEXT_LINE_H
# define GET_NEXT_LINE_H
 
# include <fcntl.h>
# include "libft/libft.h"
 
# define BUFF_SIZE 4
 
int     get_next_line(const int fd, char **line);
 
#endif
и мейн для проверки)
#include "get_next_line.h"
#include "libft.h"
#include <stdio.h>

int     main(int argc, char **argv)
{
    int     fd;
    char    *line;
    int     ret;
 
    argc = argc + 0;
    fd = open(argv[1], O_RDONLY);
    while ((ret = get_next_line(fd, &line)) == 1)
    {
        printf("%d : %s\n", ret, line);
        ft_strdel(&line);
    }
    return (0);
}
Спасибо!)

Решение задачи: «Поддержка множественный дескриптор файла»

textual
Листинг программы
size_t  ft_strlen(const char *s)
{
    int i;
 
    i = 0;
    while (s[i] != '\0')
        i++;
    return (i);
}

Объяснение кода листинга программы

В данном коде представлена реализация функции ft_strlen, которая принимает в качестве аргумента константный указатель s на строку символов и возвращает её длину в формате size_t. Внутри функции создаётся переменная i типа int, которая инициализируется нулём. Затем в цикле while с условием s[i] != '\0' переменной i присваивается значение s[i], и после каждой итерации i увеличивается на единицу. Цикл продолжается до тех пор, пока не будет встречен нулевой символ. По завершении цикла функция возвращает значение переменной i, которое является длиной строки.

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы