2014-01-12 19 views
0

我试图用频率和持续时间发出嘟嘟声,我使用ioctl和控制台路径中的文件(我认为它是正确的,我顺便说一句,使用debian 6),但我不知道为什么它不起作用。代码到达ioctl行,但不发出哔声。我在虚拟机中工作。驱动程序不应该是问题,因为我已经安装了自己的驱动程序来控制键盘LED,并且没有任何问题。当试图用持续时间和频率发出嘟嘟声时出现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); 

    } 
} 
+1

检查失败的ioctl调用中的“errno”值。 – suspectus

+0

ioctl呼叫,返回0,所以它看起来好像会做得很好 – Kaostias

+1

开启扬声器并将音量调高到零以上:) –

回答

0

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

1

我不知道是否能解决你的问题,但考虑到 的open()“的oflag”的说法应该是O_WRONLY或许O_RDWR,但不字符'w'

+0

是的,我知道,我已经改变了它,但按预期它仍然不起作用。 – Kaostias

相关问题