Метод lseek
кажется разумным. Это, конечно, не может привести к ложному отрицанию - если это произошло, что-то серьезно не так с реализацией Кроме того, в соответствии со спецификацией POSIX предполагается, что произойдет сбой, если дескриптор представляет собой канал, FIFO или сокет, поэтому теоретически у вас также не должно быть ложных срабатываний. Единственный оставшийся вопрос - насколько разные системы соответствуют спецификациям. Однако, похоже, что любые другие методы, какими бы они ни были, определенно были бы менее переносимыми, чем этот.