В зависимости от аргументов командной строки я устанавливаю указатель файла так, чтобы он указывал либо на указанный файл, либо на стандартный ввод (для передачи по конвейеру). Затем я передаю этот указатель ряду различных функций для чтения из файла. Вот функция для получения указателя файла:
FILE *getFile(int argc, char *argv[]) {
FILE *myFile = NULL;
if (argc == 2) {
myFile = fopen(argv[1], "r");
if (myFile == NULL)
fprintf(stderr, "File \"%s\" not found\n", argv[1]);
}
else
myFile = stdin;
return myFile;
}
Когда он указывает на стандартный ввод, fseek
не работает. Под этим я подразумеваю, что использую его, а затем использую fgetc
и получаю неожиданные результаты. Это ожидаемое поведение, и если да, то как мне перемещаться в разные места в потоке?
Например:
int main(int argc, char *argv[]) {
FILE *myFile = getFile(argc, argv); // assume pointer is set to stdin
int x = fgetc(myFile); // expected result
int y = fgetc(myFile); // expected result
int z = fgetc(myFile); // expected result
int foo = bar(myFile); // unexpected result
return 0;
}
int bar(FILE *myFile) {
fseek(myFile, 4, 0);
return fgetc(myFile);
}
fseek()
. Очевидно, это не работает, когда указатель указывает на стандартный ввод? Есть мысли по этому поводу? (обновил вопрос) - person Tyler Treat   schedule 07.02.2011