Есть ли в c что-нибудь похожее на Reflection API, а аннотации есть в java.? - PullRequest
0 голосов
/ 30 мая 2020

Недавно я реализовал HTTP-сервер на языке c. он очень хорошо обслуживает ресурсы stati c при запросе клиента на обслуживание. Теперь я хочу, чтобы он обслуживал ресурсы Dynami c, такие как jsp в java (tomcat), это означает, что какой-то фрагмент кода может выполняться на стороне сервера, и должен быть отправлен ответ. Я делал такие вещи в java, используя отражение, аннотации и другие основные библиотеки, но я никогда не делал этого в c раньше.

Может ли кто-нибудь помочь мне сделать это в c.Заранее спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

Хотя в C нет эквивалентных возможностей, подобных Reflection API или Annotation, все же можно реализовать то, что вам нужно, но вам потребуется выполнить тяжелую работу.

В основном то, что я Я получаю, что вы хотите:

  1. Выяснить, какой тип ресурса

  2. В зависимости от типа, который вы хотите выполнить его с помощью некоторого скрипта и отправьте его вывод.

Для части 1 вы можете основывать его на расширении ресурса. Вы можете использовать системные типы MIME или создать собственное сопоставление, например:

struct Mapping {
   char *extension;
   char *command;
};

struct Mapping mapping[] = {
                            {"jsp", "<command to run jsp>"},
                            {"sh", "/bin/bash %1"}
};

Для части 2, когда ваш сервер получает запрос, ему необходимо извлечь расширение ресурса и проверить его. сопоставление, чтобы увидеть, какая запись соответствует расширению, получите поле command и выполните команду (после замены аргументов, если они есть), используя вызов system().

Обратите внимание, что в качестве присваивания это отличный способ узнать много нового, но если вы запустите это в производство, это будет огромная дыра в безопасности!

...