做类似 fgetc() 的事情

Do something like fgetc()

下面的代码(有点)有效。我希望它从文件中读取单个字符并 return 该字符,它确实这样做了,但问题是它一遍又一遍地读取相同的字符。当我第二次调用它时,我希望它记住最后一个字符并读取文件中的下一个字符。

我是编码新手。请提供任何帮助。

#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);
}

哎呀。每次打开文件进行读取时,文件指针都位于文件的开头。并且您不能通过程序的不同调用来传递打开的文件。

我认为是时候在你的 main 中学习 for 循环了:

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 定义)