Я хочу генерировать звуковой сигнал с определенной частотой и длиной (для разных звуковых сигналов) с использованием системного звукового сигнала (и только динамики, если бипер недоступен/доступен). Я знаю, что это можно сделать с помощью ioctl, но для этого нужен root-доступ, которого я не хочу.Beep on Linux in C
Я знаю, что могу просто использовать команду «beep», но это была бы зависимость, которая, по возможности, не должна использоваться (никаких внешних зависимостей вообще, просто базовых библиотек linux и C).
То, что я в настоящее время является следующим кодом (но это требует привилегий суперпользователя для запуска):
#include <stdlib.h>
#include <fcntl.h>
#include <linux/kd.h>
int main(int argc, char *argv[])
{
int fd = open("/dev/console", O_RDONLY);
if (fd == -1 || argc != 3) return -1;
return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1])));
}
Если нет другого способа сделать это, то я буду использовать звуковой сигнал, но я бы очень хотел чтобы избежать зависимостей и интегрировать звуковой сигнал непосредственно в мой скрипт, но я уверен, что кто-то здесь будет знать решение/обходное решение.
Мне не нужны внешние библиотеки, так как программа должна быть максимально легкой.
Если вы работаете под рабочим столом, вы можете использовать ALSA. И вы также можете использовать команду 'play' ... И у некоторых настольных компьютеров есть уведомления ... –
@BasileStarynkevitch Не было бы слишком сложным? Я просто хочу простой звуковой сигнал с определенной частотой и длиной. Как я уже сказал Пабло, я хочу сохранить его как можно более легким, но я полагаю, что использовать звуковой сигнал или suid для получения доступа к корням - это путь? – omnidan
Посмотрите, поможет ли вам [это] (http://stackoverflow.com/questions/412789/windows-beep-equivalent-for-linux). @paxdiablo утверждает, что он может запускаться из учетной записи пользователя. –