尝试以持续时间和频率发出哔声时出现 ioctl 错误
Posted
技术标签:
【中文标题】尝试以持续时间和频率发出哔声时出现 ioctl 错误【英文标题】:ioctl error when trying to beep with a duration and frequency 【发布时间】:2014-01-12 12:10:44 【问题描述】:我正在尝试发出具有频率和持续时间的哔声,我正在使用 ioctl 和带有控制台路径的文件(我认为这是正确的,顺便说一下,我使用的是 debian 6)但是我不知道为什么它不起作用。代码到达 ioctl 行,但没有发出哔哔声。我在虚拟机中工作。驱动程序应该不是问题,因为我已经安装了自己的驱动程序来控制键盘 LED 并且没有问题。
(我已经按照这个例子:http://linuxplayer.org/2010/04/beep-your-pc-speaker-in-linux)
#include <sys/ioctl.h>
#include <linux/kd.h>
int bip;
#define consolepath "/dev/console"
//#define consolepath "/dev/tty0"
void beep (int freq, int dur)
int aux;
if ( (bip = open(consolepath, 'w')) == -1 )
printf ("console unreachable/dev/console!\n" );
else
//fprintf(bip, "%c[10;%d]%c[11;%d]\a", ESC, freq, ESC, dur); //Another different try
ioctl(bip, KDMKTONE, (dur<<16 | 1193180/freq));
close(bip);
【问题讨论】:
检查失败的 ioctl 调用中的errno
值。
ioctl 调用,返回 0,所以看起来它会做得很好
打开扬声器并将音量调到零以上:)
我的扬声器已打开,但谢谢 :) 是否有其他途径可以让我发出具有频率和持续时间的声音?
频率是否在可听范围内? 10 到 10-20kHx?
【参考方案1】:
我不知道这是否能解决您的问题,但给出的“oflag”参数
到open()
应该是O_WRONLY
或者O_RDWR
,但不是字符'w'
。
【讨论】:
是的,我知道,我已经更改了它,但正如预期的那样,它仍然不起作用。【参考方案2】:问题出在我的操作系统上,我在VMWare Workstation中执行Debian 6,端口映射没有做好,所以我做不到。
【讨论】:
以上是关于尝试以持续时间和频率发出哔声时出现 ioctl 错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 python 中使用 ioctl 读取驱动器属性时出现溢出错误