做类似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
。然后了解程序的行为。这是函数的主要测试。好的,谢谢。循环为我解决了特定问题,是的,我将添加到函数中。