Как вызвать определенную функцию в исходном файле C из сценария оболочки?

Несмотря на то, что это старая тема, я хотел бы поделиться этим ответом, в котором используется только одна команда sed:

sed '1,2p;/^[[:digit:]]/!d;' file

Он сохраняет две первые строки (заголовок и подчеркивание ), затем удаляет все строки, которые не начинаются с цифры.

0
08.12.2020, 22:39
2 ответа

Невозможно вызвать функцию из двоичного файла/библиотеки C непосредственно из оболочки. Некоторые языки поддерживают это (, например Python с ctypes ), но я не знаю подобного варианта для bash (или других оболочек ).

Вам нужно будет использовать параметры командной строки и вызвать программу на C с параметром/аргументом, который указывает вашей программе вызывать определенную функцию.

Итак, для вашего примера вам нужно сделать что-то вроде

int main(int argc, char *argv[])  {

   if (argc != 2) {
      printf("Argument expected\n");
      return 1;
   }
   
   if (strcmp (argv[1], "funcA") == 0)
      funcA();
}

И затем вы можете вызвать его из оболочки, например

$./a.out funcA
Congrats..!! This is function A...!!
1
18.03.2021, 22:44

Если вы хотите немного изменить свой код, добавив вызов функции exit(, например.exit(0);)в конце функций, вы можете скомпилировать свой код, передав опцию -e funcAкомпоновщику, чтобы в этом случае сделать их точку входа funcA.

Предполагая, что файл вызывается foo.c, вы можете иметь следующий сценарий оболочки, который выполняет функцию funcAиз файла foo.cпри вызове call foo.c funcAиз сценария оболочки.

call() {
    cc -Wl,-e"$2" $1 &&./a.out
}
1
18.03.2021, 22:44

Теги

Похожие вопросы