К сожалению, система не всегда может знать размер канала - например, если вы перенаправляете длительный процесс в другую команду, исходный процесс может еще не завершиться. В этом случае нет никакого возможного способа (даже теоретически) узнать, сколько еще данных выйдет из него.
Если вы хотите узнать объем данных, в настоящее время доступных для чтения из канала, это может быть возможно, но это будет зависеть от буферизации ОС и других факторов, которые трудно контролировать. Наиболее распространенный подход здесь - просто продолжать чтение, пока не останется ничего (если вы не получите EOF, тогда процесс с исходным кодом еще не завершен). Однако я не думаю, что это то, что вы ищете.
Так что, боюсь, нет общего решения.