Ich möchte mit dem Systempiepser einen Signalton mit einer bestimmten Frequenz und Länge (für verschiedene Tonsignale) erzeugen (und nur die Lautsprecher, wenn der Signalton nicht verfügbar/zugänglich ist). Ich weiß, dass es möglich ist, dies mit ioctl zu tun, aber das erfordert Root-Zugriff, den ich nicht will.Beep unter Linux in C
Ich weiß, ich könnte einfach den "Beep" -Befehl verwenden, aber das wäre eine Abhängigkeit, die, wenn möglich, sollte nicht verwendet werden (keine externen Abhängigkeiten, nur die grundlegenden Linux-Bibliotheken und C).
Was ich zur Zeit habe, ist der folgende Code (aber dies erfordert Privilegien Super-User laufen):
#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])));
}
Wenn es keine andere Möglichkeit, dies zu tun ist, dann werde ich Piepton, aber ich würde wirklich gerne um Abhängigkeiten zu vermeiden und den Signalton direkt in mein Skript zu integrieren, aber ich bin mir sicher, dass jemand hier eine Lösung/Abhilfe kennt.
Ich möchte nicht wirklich externe Bibliotheken, da das Programm so leicht wie möglich sein sollte.
Wenn Sie unter einem Desktop arbeiten, können Sie ALSA verwenden. Und Sie könnten auch den 'play' Befehl verwenden ... Und einige Desktops haben Benachrichtigungen ... –
@BasileStarynkevitch Wäre das nicht übermäßig kompliziert Dinge? Ich möchte nur einen einfachen Piepton mit einer bestimmten Frequenz und Länge. Wie ich bereits Pablo gesagt habe, möchte ich es so leicht wie möglich halten, aber ich nehme an, dass die Verwendung von Beep oder Suid, um Root-Zugriff zu erhalten, der richtige Weg ist? – omnidan
Sehen Sie, ob [dies] (http://stackoverflow.com/questions/412789/windows-beep-equivalent-for-linux) Ihnen hilft. @paxdiablo behauptet, dass es auch von einem Benutzerkonto ausgeführt werden kann. –