Возможно, это правильный подход, если вы более знакомы со сценариями оболочки, чтобы сделать это следующим образом:
Используйте сценарий оболочки в качестве основы, которая выполняет все высокоуровневые вычисления. Этот сценарий может использовать одну (или несколько) команд для обращения к API; только чтобы предоставить эти команды, напишите небольшие программы на C.
Например:
#!/bin/bash
valueA=$(APIhelper -q valueA)
valueB=$(APIhelper -q valueB)
process() { … }
result=$(process "$valueA" "$valueB")
APIhelper -s result "$result"
Эта часть должна быть понятна, если вы разбираетесь в сценариях оболочки.
Теперь вам нужно только написать двоичный файл APIhelper
(выберите более подходящее имя в зависимости от вашего контекста ;-).
Это может быть такая программа на C:
int main(int argc, char *argv[]) {
if (argc > 1) {
if (strstr(argv[1], "-q") == 0) {
if (argc > 2) {
char *variableName = argv[2];
someType result = makeYourApiCall(variableName);
printf("%O\n", result); # use a fitting format instead of %O!
} else {
fprintf(stderr, "-q without variable name\n");
exit(1);
}
else if (strstr(argv[1], "-s") == 0) {
…
} else {
fprintf(stderr, "option not understood: %s\n", argv[1]);
exit(1);
}
} else {
fprintf(stderr, "missing option\n");
exit(1);
}
return 0;
}
Таким образом, в программе на C выполняется только самая базовая обработка API, и вы можете придерживаться того, что лучше всего кодируете в: скриптах. Кроме того, таким образом вы можете легко отлаживать свой API, потому что этот инструмент APIhelper
можно вызывать из командной строки в интерактивном режиме.
person
Alfe
schedule
02.07.2015
system("[ -e /mnt/sd/video ]")
уметь что-нибудь выполнить? - person Pimgd   schedule 02.07.2015PATH
и поместите вредоносный скрипт с именем какой-то из программ, выполняемых кодом c, то ...! - person Iharob Al Asimi   schedule 02.07.2015IFS
. - person Andrew Henle   schedule 02.07.2015/bin/ls
, например, вредоносным кодом, что ж, у вас в системе больше проблем, чем у вашей программы. - person chepner   schedule 02.07.2015system()
вместо поставляемого libcsystem()
? Никаких системных компромиссов. - person Andrew Henle   schedule 02.07.2015