我正在尝试在OpenBSD中获取C程序的音量信息。通过shell命令将是
mixerctl outputs.master
但我怎样才能在C中得到它?到目前为止,我只在audio(4)
联机帮助页中找到了类似的内容,但我无法让它工作(我不擅长C):
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/audioio.h>
#include <string.h>
int main(int argc, char *argv[]) {
audio_info_t *info;
int fd;
fd = fopen("/dev/audioctl", "r");
if (ioctl(fd, AUDIO_GETINFO, &info) < 0)
fprintf(stderr, "%s\n", strerror(errno));
...
}
给了我Inappropriate ioctl for device
。我究竟做错了什么?这是获得音量的正确方法吗?
我的错误似乎是错误地打开文件并移交info
变量。两者都扎根于我与指针混淆......
以下是我如何使用它:
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/audioio.h>
#include <string.h>
int main(int argc, char *argv[]) {
audio_info_t info;
FILE *fd;
fd = fopen("/dev/audioctl", "r");
if (ioctl(fileno(fd), AUDIO_GETINFO, &info) < 0)
fprintf(stderr, "%s\n", strerror(errno));
printf("%d", info.play.gain);
fclose(fd);
}