yuk1ty / learning-systems-programming-in-rust

「Rustでもわかるシステムプログラミング」
433 stars 23 forks source link

4.3.1: signal-hook の Signals イテレータを使い、SIGINTを待受けて終了するプログラム #54

Closed laysakura closed 3 years ago

laysakura commented 3 years ago

Fixes: #30

https://github.com/yuk1ty/learning-systems-programming-in-rust/issues/30#issuecomment-831653136 で書いたことを考え、libcクレートの導入は(重たくてCIや手元ビルドを遅くするので)やめ、signal-hook クレートを使うことにしました。

システムプログラミングとしては面白みに欠けますが...

動作確認

% cargo run --bin 4_3_1
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/4_3_1`
Waiting SIGINT (CTRL+C)
^CSIGINT arrived
higumachan commented 3 years ago

こちらに関してなのですが、本書内では4章.チャンネルという流れで解説されているものになります。

ですので、どちらかと言うと #40 で決めたgroutineのポート先で実装するほうが書き換え的に良さそうかと思うのですがいかがでしょうか?

higumachan commented 3 years ago

すいません、issueの議論の時点で提起しておいたほうが良かったですね。

laysakura commented 3 years ago

ああなるほど。確かにチャンネルありきでシグナルハンドリングは一例である箇所ですね。

rx.recv() でシグナルを受け取る形に書くのが良さそうということですね。理解しました。 書き換えを検討してみます。

laysakura commented 3 years ago

@hide5stm ae4459e こちらで修正したのでご確認ください 🙏

yuk1ty commented 3 years ago

5/11 23:59 までオープンしておきます。コメント等ご自由にどうぞー

laysakura commented 3 years ago

コンフリクト解消しておきました。

yuk1ty commented 3 years ago

ありがとうございました!マージしますね