2014-12-08 2 views
0

Файлы из каталога/proc не могут быть прочитаны обычным способом. В частности, fstat скажет вам, что файл имеет нулевой размер, даже если есть контент.Обнаружение, когда дескриптор файла из/proc

Это приводит к хаосу с некоторым кодом чтения файла, который сначала запрашивает размер файла перед чтением. По сути, вам нужно читать файлы из/proc, как будто бы вы читали трубу или stdin - читайте, пока не получите EOF.

Но как я могу определить, является ли файловый дескриптор, или FILE * из/proc?

Глядя на содержимое stat после выполнения fstat, я не вижу четкого способа его обнаружения. Ничто в st_mode, или права собственности или разрешения не могут окончательно сказать мне его из/proc.

Идентификатор устройства выглядит многообещающим - в системах, которые я пробовал, он возвращается как 3, где обычные диски имеют большее число (например, 801). Но всегда ли это 3? Я не могу найти официальный способ.

Ищет ответ в c/C++

+0

Измените свою логику, чтобы ваш код мог работать с трубой. Тогда перестаньте заботиться. –

+0

Почему ваш код должен знать размер файла? – cdhowie

+0

Это ясный вопрос XY. Вы читаете от FDs неправильно. Вам не нужен размер файла. Размер файла не существует с потоком или трубой. Удалите это ограничение, и все готово. –

ответ

0

Хорошо ответ был найден.

#include <sys/statfs.h> 
#include <linux/magic.h> 

struct statfs fs; 
fstatfs(fileno(file), &fs); 
bool isProc = (fs.f_type == PROC_SUPER_MAGIC) ? true : false; 
+0

магия добавлена. проверены и работают. –

Смежные вопросы