Я заметил, что в своем комментарии к ответу Майкла вы сказали, что используете C / C ++.
Вы, безусловно, можете выполнять файловый ввод / вывод в Asterisk, используя C или C ++ (или любой другой язык). Asterisk поддерживает четыре основных типа приложений:
Схема набора: язык сценариев Asterisk по умолчанию. Любой код в extensions.conf
является абонентской группой. Вы можете использовать этот язык, чтобы контролировать входящие звонки и делать вещи. Для файлового ввода / вывода абонентская группа предоставляет команду System
, а также команду AGI
, которая позволяет вам запускать другое программное обеспечение (например, скрипт bash, двоичный файл C, что угодно). Затем в вашем bash-скрипте, C-программе и т. Д. Вы можете просто выполнять обычный файловый ввод-вывод, как если бы вы запускали программу из командной строки самостоятельно. EX:
[some_context]
exten => s,1,System(/bin/echo "hello, world" >> /tmp/test.txt)
exten => s,n,Return()
[launch_an_agi]
exten => s,1,AGI(/var/lib/asterisk/agi-bin/my_c_program,optional_cmd_line_arguments,to,pass)
exten => s,n,Hangup()
AGI: Asterisk AGI (запускается из кода абонентской группы) позволяет вам запускать внешние программы (программу на C или что-то еще) и передает вашей программе на C некоторые переменные Asterisk о вызове, который в данный момент обрабатывается, который ваша программа может использовать , Вы можете использовать свои обычные инструменты кодирования здесь, чтобы выполнить любой ввод / вывод файла, например:
/* some_c_agi_program */
include <stdio.h>
int main(void) {
FILE *f = fopen("/tmp/test.txt", "w");
(void)fprintf(f, "MY FILE IO WORKS! THANKS STACKOVERFLOW!\n");
fclose(f);
return 0;
}
AMI: AMI - это сетевой API, предоставляемый Asterisk. Вы можете использовать это для написания программ, запускаемых на другом сервере, которые могут создавать, контролировать и отображать состояние вызовов на сервере Asterisk. Идея состоит в том, что вы подключаетесь через сокет TCP к серверу звездочки в вашей программе, затем отправляете команды и считываете ответы. Я не собираюсь показывать пример, потому что это была бы огромная программа на C. Но вы поняли.
Теперь на отладку!
В зависимости от типа приложения, которое вы пишете, существуют различные способы отладки. Если вы знакомы с концепцией модульного тестирования, вы можете написать модульные тесты и убедиться, что они выполняются для любого из методов, которые я собираюсь описать. Для отладки общего назначения (если вы пишете программу AGI или AMI) можно использовать обычный отладчик C (GDB).