File io 星号格式的正常文件i/o操作

File io 星号格式的正常文件i/o操作,file-io,asterisk,File Io,Asterisk,我用星号来实现一个语音服务器。我有以下两个问题: 我希望能够读/写文件以赋予一些附加功能。有没有办法在星号中这样做?我注意到用于写入输出的正常函数(如cout等)被抑制 有没有办法调试用星号编写的应用程序?我是说像星号的gdb 欢迎对上述问题提供任何帮助。 谢谢, 斯利拉姆 你用AGI吗?当然,使用AGI,您可以读取/写入文件 您可以使用-vvv命令行选项使星号更详细。更多v使星号更详细。对我来说,调试拨号计划就足够了。如果我想调试AGI,那么我使用日志记录到某个日志文件,或者对于更简单的任务,

我用星号来实现一个语音服务器。我有以下两个问题:

  • 我希望能够读/写文件以赋予一些附加功能。有没有办法在星号中这样做?我注意到用于写入输出的正常函数(如cout等)被抑制

  • 有没有办法调试用星号编写的应用程序?我是说像星号的gdb

  • 欢迎对上述问题提供任何帮助。
    谢谢,
    斯利拉姆

  • 你用AGI吗?当然,使用AGI,您可以读取/写入文件

  • 您可以使用
    -vvv
    命令行选项使星号更详细。更多
    v
    使星号更详细。对我来说,调试拨号计划就足够了。如果我想调试AGI,那么我使用日志记录到某个日志文件,或者对于更简单的任务,我使用伪AGI_lib(适用于没有真正AGI的单元测试)

  • 你用AGI吗?当然,使用AGI,您可以读取/写入文件

  • 您可以使用
    -vvv
    命令行选项使星号更详细。更多
    v
    使星号更详细。对我来说,调试拨号计划就足够了。如果我想调试AGI,那么我使用日志记录到某个日志文件,或者对于更简单的任务,我使用伪AGI_lib(适用于没有真正AGI的单元测试)


  • 我注意到,在你对米迦勒的回答的评论中,你说你使用的是C/C++。< /P> <>你可以用C或C++(或者任何语言)在星号中做文件I/O。Asterisk支持四种主要类型的应用程序:

    拨号计划:默认的星号脚本语言。
    extensions.conf
    中的任何代码都是拨号计划。您可以使用此语言控制入站呼叫,并执行其他操作。对于文件I/O,拨号计划提供了一个
    System
    命令,以及一个
    AGI
    命令,这两个命令都允许您运行其他软件(如bash脚本、C二进制文件等)。然后在bash脚本、C程序等中,您可以像自己在命令行上运行程序一样执行普通的文件I/O。例:

    [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程序传递一些有关当前正在处理的呼叫的星号变量,您的程序可以使用这些变量。您可以在此处使用普通的编码工具来执行任何需要的文件I/O,例如:

    /* 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;
    }
    
    /*一些agi程序*/
    包括
    内部主(空){
    文件*f=fopen(“/tmp/test.txt”,“w”);
    (void)fprintf(f,“我的文件IO工作!谢谢STACKOVERFLOW!\n”);
    fclose(f);
    返回0;
    }
    
    AMI:AMI是Asterisk提供的网络API。您可以使用它编写在另一台服务器上运行的程序,该程序可以创建、控制并显示Asterisk服务器上的调用状态。其思想是通过TCP套接字连接到程序中的asterisk服务器,然后发送命令并读回响应。我不打算展示一个例子,因为这在C语言中是一个巨大的程序。但是你明白了

    • 有关拨号计划的更多信息:
    • 有关AGI的更多信息:
    • 有关AMI的更多信息:
    现在,开始调试


    根据您正在编写的应用程序的类型,有多种调试方法。如果您熟悉单元测试的概念,您可以编写单元测试,并确保它们针对我将要描述的任何方法运行。对于通用调试(如果你正在编写一个AGI或AMI程序),你可以使用普通的C调试器(GDB)。

    < P>我注意到,在你对米迦勒的回答的评论中,你说你使用的是C/C++。 <>你可以用C或C++(或者任何语言)在星号中做文件I/O。Asterisk支持四种主要类型的应用程序:

    拨号计划:默认的星号脚本语言。
    extensions.conf
    中的任何代码都是拨号计划。您可以使用此语言控制入站呼叫,并执行其他操作。对于文件I/O,拨号计划提供了一个
    System
    命令,以及一个
    AGI
    命令,这两个命令都允许您运行其他软件(如bash脚本、C二进制文件等)。然后在bash脚本、C程序等中,您可以像自己在命令行上运行程序一样执行普通的文件I/O。例:

    [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程序传递一些有关当前正在处理的呼叫的星号变量,您的程序可以使用这些变量。您可以在此处使用普通的编码工具来执行任何需要的文件I/O,例如:

    /* 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;
    }
    
    /*一些agi程序*/
    包括
    内部主(空){
    文件*f=fopen(“/tmp/test.txt”,“w”);
    (void)fprintf(f,“我的文件IO工作!谢谢STACKOVERFLOW!\n”);
    fclose(f);
    返回0;
    }
    
    AMI:AMI是Asterisk提供的网络API。您可以使用它编写在另一台服务器上运行的程序,该程序可以创建、控制并显示Asterisk服务器上的调用状态。其思想是通过TCP套接字连接到程序中的asterisk服务器,然后发送命令并读回响应。我不打算展示一个例子,因为这在C语言中是一个巨大的程序。但是你明白了

    • 有关拨号计划的更多信息:
    • 有关AGI的更多信息:
    • 有关AMI的更多信息:
    现在,开始调试


    根据您正在编写的应用程序的类型,有多种调试方法。如果您熟悉单元测试的概念,您可以编写单元测试,并确保它们针对我将要描述的任何方法运行。对于通用调试(如果您正在编写AGI或AMI程序),可以使用普通的C调试器(GDB)。

    也许我遗漏了一些东西,但它需要比Asterisk自己的内置函数更复杂吗?

    Set(FILE(/tmp/foo.txt,-1,,l)=cat)
    Set(FILE(/tmp/foo.txt,,,al)=dog)
    
    exten => 800,n,Set(FILE(/tmp/cid.txt,,,al)=${CALLERID(num)})