使用popen()的rewind()

时间:2013-10-22 16:50:39

标签: c unix

我有一个简单的C代码片段如下:

#include <stdio.h>
void main() {
  FILE *f;
  char c;
  f = popen("ls", "r");
  while ((c = fgetc(f)) != EOF) {
    //Some tasks
  }
  rewind(f);
  while ((c = fgetc(f)) != EOF) {
    printf("%c", c);
  }
  fclose(f);
}

我不知道为什么代码输出什么都没有。似乎rewind()函数不起作用。请帮忙找出我错在哪里。谢谢。

1 个答案:

答案 0 :(得分:8)

rewind相当于fseek(stream, 0L, SEEK_SET),而fseek仅对文件合法,而非流(管道就是这种情况)。

errno之后检查rewind

  

EBADF指定的流不是可搜索的流。