処理信号には時間がかかり、一度に送信する信号が多すぎると無視されることがあります。あなたは何ができるか
は基本的に言って、他のプロセスに応答信号を送信です:
をねえ、私はあなたの信号を持って、私は
これを準備が整いました私に、次のいずれかを送信信号が無視されることはなく、エラーがなくてもプログラムははるかに高速になります。
あなたが安いソリューションをしたい場合は、単にusleep()
と小さな値(実際には、ハードウェアに依存)を使用
ここでは、ASCIIメッセージが信号を使用して別のプロセスに送信される例です。
クライアント - 送信部
void decimal_conversion(char ascii, int power, int pid)
{
if (power > 0)
decimal_conversion(ascii/2, power - 1, pid);
if ((ascii % 2) == 1)
kill(pid, SIGUSR1);
else
kill(pid, SIGUSR2);
usleep(1);
}
void ascii_to_binary(char *str, int pid)
{
int i;
i = 0;
while (str[i] != '\0')
{
decimal_conversion(str[i], 7, pid);
i += 1;
}
}
サーバー
void sighandler(int signum)
{
static int ascii = 0;
static int power = 0;
if (signum == SIGUSR1)
ascii += 1 << (7 - power);
if ((power += 1) == 8)
{
putchar(ascii);
power = 0;
ascii = 0;
}
}
int main(void)
{
signal(SIGUSR1, sighandler);
signal(SIGUSR2, sighandler);
while (42);
return (0);
}
なぜパイプを使ってテキストを送信しないのですか? – Garf365
それは学校のためのプロジェクトでしたが、それはそれを行う最も効率的な方法ではありませんが、信号を使用することは必須であり、何も許可されていないことは分かっています。 – D7Heaven