про какую ардуину речь? Мы здесь трем за ядро Linux. А если точнее, то за свадьбу стандартного (не самописного) веб сервера и приложения на сях. Вот это я почитаю.
А мне нравится ход ваших мыслей с перегрузкой стандартных вызовов, типа основной код не менялся, а вывод стал иным. Например выводим строчку в stdout через puts Спойлер: main.c Код (Text): #include <stdio.h> int main(void) { puts("hello word"); } Соберем Код (Text): gcc -o test main.c Посмотрим что вышло Код (Text): ./test hello word сделаем свою реализацию puts Спойлер: override_puts.c Код (Text): int __real_puts(const char *s); int __wrap_puts(const char *s) { __real_puts("call is wrapped"); return __real_puts(s); } Соберем указав что puts в обертке Код (Text): gcc -o test main.c override_puts.c -Wl,-wrap,puts Посмотрим что вышло Код (Text): ./test call is wrapped hello word А main то и не знает что его прослушивают
)) ключом -Wl,-wrap,puts говорим, что вызов puts из стандартной библиотеки обернут, т.е. когда нужно вызвать puts, то нужно направить в __wrap_puts, а если необходимо вызвать библиотечный puts, то он уже под другим именем __real_puts. Это-ж gcc Скажите, это, стало быть, любую стенку можно так убрать? Вашему изобретению цены нет, гражданин! © Михаил Булгаков «Иван Васильевич»
Порядок тут не причем. Там где перегрузка реализации библиотечной функции к сигнатуре добавлен префикс __wrap_ (__wrap_puts) Чтоб вызвать библиотечный puts знаем что к сигнатуре нужно добавить другой префикс __real_ поэтому в исходнике и объявлен int __real_puts(const char *s), чтоб при компиляции не получить override_puts.c:4:2: warning: implicit declaration of function ‘__real_puts’; did you mean ‘__wrap_puts’? [-Wimplicit-function-declaration]