Определите, сколько байтов готовы к чтению из ФАЙЛА * или дескриптора файла

Учитывая ФАЙЛ * или дескриптор файла, существует ли стандартный способ узнать, сколько байтов готово к чтению?

Я не могу использовать s = ftell (f), fseek (f , 0, SEEK_END), e = ftell (f), fseek (f, s, SEEK_SET), es , поскольку FILE * просто обертывает файловый дескриптор, полученный из pipe ( 2) , и я получаю ESPIPE , когда пытаюсь это сделать.

Я думал использовать select (2) с нулевым таймаутом, чтобы сообщить, что у меня есть хотя бы один байт, готовый к чтению, а затем читать по байту, пока не будет выбран (2) сказал мне остановиться. Это кажется неуклюжим и медленным.

Есть ли способ лучше?

9
задан rampion 23 March 2011 в 18:24
поделиться