Перенаправить вызовы файлов posix в C - PullRequest
2 голосов
/ 10 августа 2011

У нас есть «библиотека» (выбор кода, который мы бы не хотели менять), написанная с точки зрения того, что она имеет доступ к 2 файлам напрямую. Он использует вызовы posix «open», «read» и «seek» непосредственно в файловом дескрипторе.

Однако теперь у нас есть проприетарная файловая система, доступ к которой невозможен через стандартные вызовы ввода-вывода. Видя, что мы не хотим переписывать код, было бы здорово, если бы мы могли перенаправить вызовы ввода-вывода на известные функции, которые затем могли бы использоваться в качестве интерфейса.

Есть ли способ изменить вызовы, использованные выше, чтобы перезаписывать "чтение" и "поиск" новыми вызовами функций?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 10 августа 2011

Когда вы говорите, что не хотите изменять код библиотеки, вы имеете в виду, что хотите использовать существующий двоичный код или просто исходный код?Если у вас есть исходный код, и вы можете перекомпилировать, я просто передам компилятору библиотеку -Dread=my_read -Dopen=my_open и т. Д., А затем предоставлю ваши * my_read и т. Д.

3 голосов
/ 10 августа 2011

Одна вещь, которую вы можете попробовать, это вставка библиотечной функции .

1 голос
/ 10 августа 2011

В дополнение к уже упомянутым функциям вставки и переименования вызовов функций с использованием макроса, другой вариант только для Linux - использовать Файловая система в пользовательском пространстве . Таким образом, вы можете сделать свою проприетарную файловую систему доступной для других приложений, которые используют стандартный API файловой системы POSIX. Пример FUSE hello world на удивление короток.

...