Оболочка для open () и open64 () и видит, что системные вызовы через vi используют open64 () - PullRequest
1 голос
/ 09 марта 2011

Я написал оболочки для open() и open64().Теперь я запускаю vi, предварительно загрузив свою библиотеку оболочки, используя переменную окружения LD_PRELOAD, и вижу, что вместо open() используется оболочка open64().Но когда я связываю vi, я вижу, что системные вызовы сделаны на open() (конечно, включая другие системные вызовы).В чем здесь проблема?

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

Вы работаете в 64-битной системе?Если так, то это не удивительно.strace отслеживает актуальные системные вызовы, а не те функции, которые в библиотеке вызываются.В 64-битных системах open и open64 реализуются одним и тем же системным вызовом.

1 голос
/ 09 марта 2011

Служебная программа strace отслеживает * системные вызовы (системный вызов) и open как системный вызов, так и библиотечная функция.Обе функции библиотеки open() и open64() используют системный вызов open для внутренних запросов служб из ядра.Насколько я понимаю, использование open() с флагом O_LARGEFILE эквивалентно использованию open64() для поддержки больших файлов в 32-разрядных приложениях.


Если бы вызов open64() былвызовите функцию open() внутри, ваша оболочка open() не будет вызвана, потому что вы не можете вставлять вызовы функций внутренней библиотеки.Они разрешаются до выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...