Это:
memset(bufpipe,'\0',5001);
перезаписывается одним байтом, потому что у вас есть только 5000 байтов.
Но главная «проблема» в том, что read(..., 5000)
всегда будет читать столько, сколько может, до 5000 байт - вы, похоже, предполагаете, что он будет читать только столько, сколько было написано за один раз писателем, неправда. Если записывающее устройство записывает два пакета по 110 байт между двумя чтениями, то вполне правильно, что считывающее устройство считывает 220 байт.
Если вам нужно читать только один пакет за раз, вы должны сделать свои пакеты самоописывающими. Так, например, первые четыре байта содержат количество байтов, чтобы следовать. Затем вы можете прочитать один пакет, прочитав четыре байта, преобразовав его в целое число, а затем прочитав это количество байтов данных.