Quiero generar un pitido con una frecuencia y duración específicas (para diferentes señales de sonido) usando el bíper del sistema (y solo los parlantes si el bíper no está disponible/accesible). Sé que es posible hacer esto usando ioctl, pero eso requiere acceso de root, que no quiero.Pitido en Linux en C
Sé que podría usar el comando "beep", pero eso sería una dependencia, que, de ser posible, no debería usarse (no hay dependencias externas, solo las bibliotecas básicas de Linux y C).
Lo que tengo actualmente es el siguiente código (pero esto requiere privilegios de superusuario para ejecutar):
#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])));
}
Si no hay otra manera de hacer esto, entonces voy a utilizar pitido, pero me gusta mucho para evitar dependencias e integrar el pitido directamente en mi secuencia de comandos, pero estoy seguro de que alguien aquí sabrá una solución/solución alternativa.
Realmente no quiero bibliotecas externas ya que el programa debe ser tan ligero como sea posible.
Si se ejecuta en una computadora de escritorio, puede usar ALSA. Y también podría usar el comando 'play' ... Y algunos escritorios tienen notificaciones ... –
@BasileStarynkevitch ¿No sería eso complicar demasiado las cosas? Solo quiero un simple pitido con una frecuencia y duración específicas. Como ya le dije a Pablo, quiero mantenerlo tan ligero como sea posible, pero supongo que usar el sonido o el suid para obtener acceso a la raíz es el camino a seguir, entonces? – omnidan
Vea si [esto] (http://stackoverflow.com/questions/412789/windows-beep-equivalent-for-linux) lo ayuda. @paxdiablo afirma que también se puede ejecutar desde una cuenta de usuario. –