做类似fgetc()的事情

做类似fgetc()的事情,c,io,posix,C,Io,Posix,下面的代码(在某种程度上)起作用。我希望它从文件中读取一个字符并返回该字符,但问题是它会反复读取同一个字符。当我第二次调用它时,我希望它记住最后一个字符,并读取文件中的下一个字符 我不熟悉编码。如果您有任何帮助,我们将不胜感激 #include "./libft/libft.h" #include <stdio.h> # define LINE 20 char getc_fd(int fd) { int ret; char c; if ((r

下面的代码(在某种程度上)起作用。我希望它从文件中读取一个字符并返回该字符,但问题是它会反复读取同一个字符。当我第二次调用它时,我希望它记住最后一个字符,并读取文件中的下一个字符

我不熟悉编码。如果您有任何帮助,我们将不胜感激

#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);
}
#包括“/libft/libft.h”
#包括
#定义第20行
char getc_fd(int fd)
{
int ret;
字符c;
如果((ret=读取(fd和c,1)!=0))
;
返回(c);
}
内部主(空)
{
int-fd;
字符buf[行+1];
fd=打开(“./file.txt”,仅限Ordu);
如果(fd==-1)
返回(-1);
buf[0]=getc_fd(fd);
/*buf[LINE]=0*/
printf(“%s”,buf);
返回(0);
}

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

我认为现在是在你的主要课程中学习for loop的时候了:

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);
}
int main(无效)
{
int-fd;
字符buf[行+1];
fd=打开(“./file.txt”,仅限Ordu);
如果(fd==-1)
返回(-1);

for(int i=0;i您的代码不是一个,并且
read
是特定于POSIX的(因此缺少与此相关的标记)。使用所有警告和调试信息编译程序:
gcc-Wall-Wextra-g
。然后了解程序的行为。这是函数的主要测试。好的,谢谢。循环为我解决了特定问题,是的,我将添加到函数中。