使用 read() 一次从文件中读取一个字符
using read() to read one char at a time from a file
我希望能够使用 read 从文件中一次读取一个字符。我不能使用 fgetc。我试着寻找 EOF,但无法正常工作。谢谢你的帮助。
char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) return 1;
int *c = '[=10=]';
int i = 0;
for(i =0; i<30;++i){
read(infile, &c, 1);
printf("%c\n", c);
if(c == EOF){
break;
}
}
如果没有更多输入,read
不会 return EOF
。 read
通常 returns 读取的字节数。由于您打算只读取一个字节,因此您期望 read
到 return 1
。当它returns 0
时,表示它已经到达终点。如果它 returns -1
,则表示它遇到了错误,您应该检查 errno
以获取更多信息。
您的程序还有其他问题。您对 int *c
的使用是完全错误的。由于 data
已经定义,您可以使用它来读取文件,即使您只打算只使用缓冲区的第一个字节。在尝试打印之前,您应该检查是否实际获得了输入。
char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) {
perror(inFileName);
return 1;
}
int i = 0;
for(i =0; i<30;++i){
int r = read(infile, data, 1);
if(r <= 0){
if (r < 0) perror("read");
break;
}
printf("%c\n", data[0]);
}
我希望能够使用 read 从文件中一次读取一个字符。我不能使用 fgetc。我试着寻找 EOF,但无法正常工作。谢谢你的帮助。
char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) return 1;
int *c = '[=10=]';
int i = 0;
for(i =0; i<30;++i){
read(infile, &c, 1);
printf("%c\n", c);
if(c == EOF){
break;
}
}
read
不会 return EOF
。 read
通常 returns 读取的字节数。由于您打算只读取一个字节,因此您期望 read
到 return 1
。当它returns 0
时,表示它已经到达终点。如果它 returns -1
,则表示它遇到了错误,您应该检查 errno
以获取更多信息。
您的程序还有其他问题。您对 int *c
的使用是完全错误的。由于 data
已经定义,您可以使用它来读取文件,即使您只打算只使用缓冲区的第一个字节。在尝试打印之前,您应该检查是否实际获得了输入。
char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) {
perror(inFileName);
return 1;
}
int i = 0;
for(i =0; i<30;++i){
int r = read(infile, data, 1);
if(r <= 0){
if (r < 0) perror("read");
break;
}
printf("%c\n", data[0]);
}