1

大家好

我用 C 语言进入了 AGI,过了一段时间我遇到了一个问题。当我使用(和其他 AGI 命令)将文件播放到通道时GET DATA,我需要应用睡眠功能,以便可以播放并且用户有时间听到它。

我的部分代码是这样的:

 char line[80];
 int digit;
 setlinebuf(stdout);
 setlinebuf(stderr);
 printf("ANSWER\n");  
 printf("GET DATA en/pbx-transfer 5000 4 \n"); 
 sleep(3);
 printf("CHANNEL STATUS\n");
 printf("HANGUP");

Asterisk 向我显示了一个关于我使用sleep()这样的警告:

The FD we were waiting for has something waiting. Waitfordigit returning numeric 1

为什么会这样?

4

1 回答 1

0

首先 - 无需重新发明轮子。c/c++ 的 AGI 接口实现不止一种

您在 agi 脚本中没有使用睡眠、线程、等待等。

AGI 架构是 STD 输入阻塞的示例。只需等待输入(从 STD 读取),它会在准备好时返回您的信息。

如果你使用它,这样的消息是正常的和预期的。您可以使用非阻塞版本的睡眠。

如果你不需要数据,你也没有使用 GET DATA。您可以使用流

于 2014-12-05T07:53:07.303 回答