LINUX.ORG.RU

Позиция операций ввода/вывода в файловом дескрипторе открытом процессом


0

0

Приветсвую!
Узнать все открытые файловые дескрипторы процессом легко: /proc/<ID>/fd
А можно ли (и как) узнать позицию операций ввода/вывода в этих файловых дескрипторах?

★★★★★

Мдя.. Вообще эту информацию мог бы предоставлять "lsof -o"..
И вполне даже предоставлял до версии 4.23.

До этой версии он был основан на /dev/kmem (в смысле брал информацию оттуда). Разумеется это был большой гемор, т.к. такая реализация была жёстко привязана к определённой версии ядра.

Начиная с примерно 2.1.72 версии ядра, procfs значительно прогрессирует (появляется /proc/[PID]/fd), чему не сомненно был обрадован автор lsof (Vic Abell).
По этому поводу он пишет письмо (18-го декабря 1997) Raul Miller (какое отношение он имеет к ядру/procfs/автору lsof я увы не знаю, но переписка у них была) примерно следующего содержания:

---
К моему удивлению /proc предоставляет *почти* всю информацию нужную lsof. Так я не нашёл там только следующих вещей:

* смещение в файле, которое lsof получает из структуры file. Оно должно бы как-нибудь обеспечиваться через /proc/<pid>/fd

* сокет-протокол. Если все протоколы представлены в /proc/net своим файлом, и есть proc/net/{tcp,udp,raw,unix}, но там нет /proc/net/ipx (мне нужно поддерживать IPX в lsof, т.к. один тестовый системный провайдер использует его)

* просмотр подключённых FIFO. Мне кажется там должна быть директория или файл /proc/fifo, подобно /proc/net/tcp, но описывающая все открытые FIFO.
---

Полный текст письма можно увидеть здесь:
http://www.ussg.iu.edu/hypermail/linux/kernel/9712.2/0233.html

Итак, обрадованный Vic Abell переписывает lsof с использованием procfs (её поддержка включается в lsof начиная с версии 4.23) и начиная с lsof версии 4.52 /dev/kmem-версия lsof для Linux перестаёт выпускаться.

Ныне последняя версия lsof уже 4.75 (а ядра насколько вы знаете 2.6.12), но ситуация по поводу 3-х вышеприведённых пунктов в procfs за более чем 7,5 лет никак не изменилась :-(((

Вот такая, вот, история.

unDEFER ★★★★★
() автор топика

А теперь то для чего собственно мне хотелось бы иметь эту информацию:
просто в очередной раз увидев в kgrellm наличие сетевой активности в локальной сети, я привычно набрал smbstatus. И подумалось мне:
"Было бы весело написать скрипт обрубающий закачку где-нибудь на последних мегабайтах. Ведь докачка файлов через локальную сеть в винде не сначала -- не такая уж и тривиальная задача! :-))".
А чтобы вовремя и надёжно обрубить эту закачку именно на последних мегабайтах нужна вот такая информация (можно конечно ещё по трафику высчитывать, но это уже не так надёжно).

unDEFER ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.