コマンドラインからbeepコマンドでブザーを鳴らすことができたのですが、プログラムから鳴らす方法がわかりません。
しかたがないので、サブプロセスを生成して、そこから system() でブザーを鳴らすという力技で鳴らすことにしました。
先にサブプロセスが終了して何もしないでいると、サブプロセスがゾンビとして残ってしまいますので、次に鳴らす前に waitpid() で回収してます。これだと常にゾンビが1つ残ることになってしまいますので、もっといい方法があるのではないかと思うのですが、今回初めての fork() なのでこの辺で妥協します。
#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
pid_t child_pid = 0;
int child_sts;
int buzzer(void)
{
/* ゾンビ回収 */
if(child_pid > 0)waitpid(child_pid,&child_sts,WNOHANG);
/* 子プロセス生成 */
child_pid = fork();
if(child_pid==-1) {
/* fork()失敗 */
printf("fork failed.\n");
}
else if(child_pid==0) {
/* 子プロセス */
system("/usr/bin/beep -f 2000 -l 20");
_exit(0);
} else {
return(0);
}
}
int main(void)
{
int i;
for(i=0;i<10;i++){
buzzer();
usleep(500000);
}
}
よく見ると、要らないヘッダを include してたりしますが、メモなのでこのままということで。