Файлы из каталога/proc не могут быть прочитаны обычным способом. В частности, fstat скажет вам, что файл имеет нулевой размер, даже если есть контент.Обнаружение, когда дескриптор файла из/proc
Это приводит к хаосу с некоторым кодом чтения файла, который сначала запрашивает размер файла перед чтением. По сути, вам нужно читать файлы из/proc, как будто бы вы читали трубу или stdin - читайте, пока не получите EOF.
Но как я могу определить, является ли файловый дескриптор, или FILE * из/proc?
Глядя на содержимое stat после выполнения fstat, я не вижу четкого способа его обнаружения. Ничто в st_mode, или права собственности или разрешения не могут окончательно сказать мне его из/proc.
Идентификатор устройства выглядит многообещающим - в системах, которые я пробовал, он возвращается как 3, где обычные диски имеют большее число (например, 801). Но всегда ли это 3? Я не могу найти официальный способ.
Ищет ответ в c/C++
Измените свою логику, чтобы ваш код мог работать с трубой. Тогда перестаньте заботиться. –
Почему ваш код должен знать размер файла? – cdhowie
Это ясный вопрос XY. Вы читаете от FDs неправильно. Вам не нужен размер файла. Размер файла не существует с потоком или трубой. Удалите это ограничение, и все готово. –