做类似 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
定义)
下面的代码(有点)有效。我希望它从文件中读取单个字符并 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
定义)