質問詳細
・signal 関数を用いて Ctrl + \ で送られるシグナルSIGQUIT を無視するようにしても、read 関数をを用いた標準入力中に Ctrl + \ を押すと、それまでの入力がなかったことになるのはなぜでしょうか??
・Ctrl + \ を押した後も、 Ctrl +\ 以前の入力内容を保持する方法はありますか?
Ctrl + \ でread の入力がクリアされる例を以下に示します。
ソースコード(test.c)
C
1#include <unistd.h> 2#include <stdio.h> 3#include <signal.h> 4 5int main() 6{ 7 char buf[10]; 8 int rv; 9 10 11 signal(SIGQUIT, SIG_IGN); 12 rv = read(0,buf, 9); 13 buf[rv] = '\0'; 14 write(1, "\n\n", 2); 15 printf("buf = %s\n",buf); 16 printf("retrun_value = %d\n",rv); 17 printf("buf[0] = %d\n",buf[0]); 18 19}
実行結果
bash
1$ gcc test.c 2$ ./a.out 31234^\ <- Ctrl + \ 押下 のあとに [Enter] 4 5 6buf = 7 8retrun_value = 1 9buf[0] = 10 <- なぜか非表示文字 "LF" が入っている。 10$
期待する挙動は以下です。
bash
1$ gcc test.c 2$ ./a.out 31234^\ <- Ctrl + \ 押下 のあとに [Enter] 4 5 6buf = 1234 7 8retrun_value = 5 9buf[0] = 49 10$
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/07 05:41
2020/09/07 05:45
2020/09/07 05:46
2020/09/07 05:55
2020/09/07 06:06