EHLO 大家
我用C语言进入AGI,过了一会儿我遇到了一个问题。当我使用 GET DATA
(和其他 AGI 命令)将文件播放到频道时,我需要应用睡眠功能,以便可以播放并且用户有时间听到它。
我的部分代码是这样的:
char line[80];
int digit;
setlinebuf(stdout);
setlinebuf(stderr);
printf("ANSWERn");
printf("GET DATA en/pbx-transfer 5000 4 n");
sleep(3);
printf("CHANNEL STATUSn");
printf("HANGUP");
Asterisk向我展示了一个关于我使用sleep()
的警告,如下所示:
The FD we were waiting for has something waiting. Waitfordigit returning numeric 1
为什么会这样?
首先 - 不需要重新发明轮子。对于 c/c++ 来说,AGI 接口嵌入不止一个
你在 agi 脚本中没有用的睡眠、线程、等待等。
AGI架构是STD输入阻塞的示例。只需等待输入(从STD读取),它将在准备就绪时返回您的信息。
如果您使用它,则此类消息是正常且预期的。您可以使用非阻塞版本的睡眠。
此外,如果您不需要数据,则无需使用GET DATA。你可以使用流