2017-02-08 11 views
1

Моя цель - определить, сколько байтов было передано в конец записи в трубе. Возможно, нужно было бы получить доступ к элементу f_pos структуры struct file из linux/fs.h, связанного с этим каналом.Извлечь количество байтов, хранящихся в конце «write» анонимного Linux PIPE

struct file snipfrom fs.h

Можно ли получить это значение из программы в пространстве пользователя? Опять же, я просто хотел бы определить (возможно, исходя из значения f_pos), сколько байтов хранится в буфере ядра, поддерживающем канал.

У меня есть чувство, что это не возможно, и один имеет не продолжать читать до read(int fd, void *buf, size_t count) возвращает меньше байт, чем сосчитать .. то на данный момент, все байты были «опустошен» Я предполагаю, что ..

+0

Добро пожаловать в переполнение стека! Здесь мы хотим, чтобы каждый вопрос поставил описание ** одной проблемы **. Но ваш пост представляет собой сразу несколько проблем: 1. «Определенная структура, которая отслеживает буфер» - это часть ** ядра **. 2. 'Должна быть какая-то структура, на которую указывает индекс, на который ссылается файловый дескриптор' - ядро ​​сохраняет отображение из файловых дескрипторов для ** всех файлов **, а не только для * pipe *. 3. Байты, доступные в трубе, могут запрашиваться 'ioctl (fd, FIONREAD, & nbytes);'. Пожалуйста, отредактируйте вопрос и оставите в нем один вопрос/проблему. – Tsyvarev

+0

Привет, это отвечало на все мои вопросы. Я на самом деле не заметил, что вы ответили на них, прежде чем внимательно читать свой комментарий. –

ответ

1

Сумма байтов, доступных для чтения из трубы может быть запрошена

ioctl(fd, FIONREAD, &nbytes); 

Здесь fd является файловый дескриптор, и переменная nbytes, где будет храниться результат, является int переменной.

Снято с: man 7 pipe.


Количество байтов, доступных для написать является different story.