ftell( stdin) вызывает ошибку незаконного поиска
Следующий код выводит "Незаконный поиск":
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
errno = 0;
getchar();
getchar();
getchar();
ftell( stdin );
printf( "%s\n", strerror(errno) );
}
Это происходит, когда я запускаю "cat script |./a.out", а также когда я просто запускаю "./a.out". Проблема с Ftell, конечно. Мой вопрос: почему это происходит? Я думаю, что stdin можно искать. fseek также вызывает ту же ошибку. Если stdin не доступен для поиска, могу ли я сделать то же самое?
Спасибо за ваши ответы.
1 ответ
Решение
Fifos не доступны для поиска. Они просто буфер. После того, как данные были read()
из буфера fifo его никогда не получить.
Обратите внимание, что если вы запустили свою программу:
./a.out < script
тогда стандартным вводом будет файл, а не fifo, поэтому ftell()
будет делать то, что вы ожидаете.