C - 尝试按持续时间和频率发出蜂鸣声时出现 IOCTL 错误



我正在尝试发出频率和持续时间的哔哔声,我正在使用ioctl和一个带有控制台路径的文件(我认为这是正确的,顺便说一下,我使用的是debian 6),但我不知道为什么它不起作用。代码到达线路 ioctl,但不发出哔哔声。我在虚拟机中工作。驱动程序应该不是问题,因为我已经安装了自己的驱动程序来控制键盘指示灯并且没有问题。

(我遵循了这个例子: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);
    }
}
我不知道

这是否可以解决您的问题,但是给出了"oflag"参数open()应该是O_WRONLY的,或者可能是O_RDWR的,但不是字符'w'

问题出在我的操作系统上,我在VMWare Workstation中执行Debian 6,端口映射做得不好,所以我做不到。

最新更新