使用read()从文件中一次读取一个char

时间:2018-05-02 01:59:20

标签: c eof

我希望能够使用read一次从一个文件中读取一个字符。我不能用fgetc。我试着寻找EOF,但我无法让它发挥作用。谢谢你的帮助。

char data[1024];
int infile = open(inFileName, O_RDONLY);
if(infile < 0 ) return 1;

int *c = '\0';
int i = 0;
for(i =0; i<30;++i){
   read(infile, &c, 1);
   printf("%c\n", c);
   if(c == EOF){
       break;
     }
}

1 个答案:

答案 0 :(得分:1)

如果没有更多输入,

read不会返回EOFread通常返回读取的字节数。由于您打算只读取一个字节,因此您希望read返回1。当它返回0时,表示它已到达终点。如果它返回-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]);
}