我有一个简单的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()函数不起作用。请帮忙找出我错在哪里。谢谢。
答案 0 :(得分:8)
rewind
相当于fseek(stream, 0L, SEEK_SET)
,而fseek
仅对文件合法,而非流(管道就是这种情况)。
在errno
之后检查rewind
EBADF指定的流不是可搜索的流。