Closed hiroin closed 4 years ago
Ctrl + \ で送られるシグナルを無視するよう設定してもなぜかCtrl + \ までの入力が消えちゃうんですよね(^^ ;)
これに関しては、解決策がわからなかったのでtratail に質問しました。 https://teratail.com/questions/290080
修正コミットしましたが、ミスです
https://teratail.com/questions/290080
この回答を見る限り、入力キューのクリアをSIGQUITだけ無効にするのは難しそうです。 stty noflush を使ってしまうと、SIGINT も同時にクリア無効になってしまうので、以下のような動作祖語が起きます
minishell$ ls ^C
minishell$ exit [Enter]
ls: exit: No such file or directory
つまり、バッファ管理をしないとこの機能は実装できないのではないですかね。。。。 SIGQUIT だけ noflush が適用できないかもう一度teralia で聞いてみます
回答をくれた方が、Linux、bash、Apache総合1位なんですね…、すごいな…詳しいな… 割り込みを発生させる入出力キューがクリアされること、キューを制御するには、termiosかsttyをいじる必要があること、しかしnoflushにすると、Ctrl + Cしたときにもキューがクリアされないことによる齟齬が発生することを理解しました。 bashは、おそらくデフォルトの入出力キューとは違う仕組みのキューを持っているのかなと想像しました。少なくともread関数だけでは実装できないので、諦めましょう。 レビューのときには与えられている関数だけでは実装が不可能であることを予め説明しておきましょう。 課題の意味は、signal関数を使って、ちゃんとSYGQUIT送れているか?で、コマンドの途中でCtrl + \したときに、「何も起きない」ことの確認ができるので、この件はそのままの実装でいきましょう。 closeいたします!
事案 $ ls ctrl+\ [Enter]の動作相違
miishellのver 0a2a3807992ab3f054ab49c5c1e59365abf08e0e
事案詳細 $ date ctrl+\ [Enter] とした場合、bashはdateが実行されるが、minishellは実行されない
[bash]
[minishell]