做像fgetc()这样的事情

时间:2018-06-12 11:08:15

标签: c io posix

以下代码(稍微)有效。我希望它从文件中读取一个字符并返回该字符,但它的问题是它一遍又一遍地读取相同的字符。当我第二次调用它时,我希望它记住最后一个字符,然后在文件中读取下一个字符。

我是编码的新手。请任何帮助将不胜感激。

#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 :(得分:1)

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