このプログラム
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <windows.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
void INThandler(int);
int main(void)
{
signal(SIGINT, INThandler);
char data[128];
int n;
while((n=read(0, data, 128)) > 0)
{
if(data[n] = '\n') break;
}
data[n] ='\0';
printf("%s", data);
return 0;
}
void INThandler(int sig)
{
char c;
signal(sig, SIG_IGN);
printf("OUCH, did you hit Ctrl-C?\n"
"Do you really want to quit? [y/n] ");
c = getchar();
if (c == 'y' || c == 'Y')
exit(0);
else
signal(SIGINT, INThandler);
}
ctrl-c を処理しませんが、その入力で終了します。ハンドラーのインストールと戻りの間のすべてを置き換えると
while (1)
Sleep(1);
ハンドラー関数が呼び出されて機能しますが、そこに read() を入れたいです。
編集: このプログラムを振り返ってみると、
if(data[n] = '\n') break;
「==」ではなく「=」と書いたのですが、後者を使うとうまく動作せず理由がわかりません。「\n」を検出するための比較ではないでしょうか。また、バッファをいじりましたが、CTRL-C を押しても入力をキープできません。