Сделать что-то вроде fgetc () - PullRequest
0 голосов
/ 12 июня 2018

Код ниже работает (несколько).Я хочу, чтобы он считывал один символ из файла и возвращал этот символ, что и происходит, но проблема в том, что он читает один и тот же символ снова и снова.Когда я вызываю его во второй раз, я хочу, чтобы он запомнил последний символ и вместо этого прочитал следующий в файле.

Я новичок в кодировании.Пожалуйста, любая помощь будет оценена.

#include "./libft/libft.h"
#include <stdio.h>
# define LINE 20


char getc_fd(int fd)
{
    int     ret;
    char    c;
    if ((ret = read(fd, &c, 1) != 0))
        ;
    return (c);
}

int main(void)
{
    int     fd;
    char    buf[LINE + 1];

    fd = open("./file.txt", O_RDONLY);
    if (fd  == -1)
        return (-1);
    buf[0] = getc_fd(fd);
    /*buf[LINE] = 0;*/
    printf("%s", buf);
    return (0);
}

1 Ответ

0 голосов
/ 12 июня 2018

Oups.Каждый раз, когда вы открываете файл для чтения, указатель файла располагается в начале файла.И вы не можете пропустить открытый файл через различные вызовы программы.

Я думаю, что настало время выучить цикл в вашем основном файле:

int main(void)
{
    int     fd;
    char    buf[LINE + 1];

    fd = open("./file.txt", O_RDONLY);
    if (fd  == -1)
        return (-1);
    for (int i=0; i<LINE; i+++) {
        buf[i] = getc_fd(fd);
    }
    buf[LINE] = 0;
    printf("%s", buf);
    return (0);
}

Следующий урок должен быть: как можноgetc_fd сообщить об ошибке или об окончании состояния файла вызывающей стороне?(подсказка: посмотрите на getc определение)

...