close()

4
プププランドのプリンス RiSK @sscrisk

何が問題なのかよく分からない。何をいいたいんだろう? "Story of Your Life » Blog Archive » fstreamのデストラクタを追ってみた話" http://shnya.jp/blog/?p=271

2011-01-06 12:15:16
プププランドのプリンス RiSK @sscrisk

"仕事でも使えるようなというレベルのことを考えると、間違いなくクローズする関数の戻り値をチェックすべきです。" というこの主張がどうなんだろう?

2011-01-06 12:17:24
にゃははー仙人 @Flast_RO

@sscrisk クローズに失敗したところでどうしろととしか言えなくて悲しい[FDIS読書会幹事募集中! http://bit.ly/g3mpzL]

2011-01-06 12:18:58
プププランドのプリンス RiSK @sscrisk

それと,「RAIIを使うなら正しく使っているか?」とか「RAIIを使うべきじゃないところで使っていないか?」とか。

2011-01-06 12:19:08
若年寄(もう若くない) @kikairoya

@sscrisk Un*xのclose(2)は失敗するから戻り値見ろというクソ仕様

2011-01-06 12:19:44
若年寄(もう若くない) @kikairoya

@sscrisk "close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。 " http://www.linuxcertif.com/man/2/close/ja/

2011-01-06 12:30:31
若年寄(もう若くない) @kikairoya

closeの類が失敗したらどうやってエラー処理したらいいんだよっていうね

2011-01-06 12:32:21
SKS rep @repeatedly

実はPhobosのソケットも無視っている RT @kikairoya: @sscrisk "close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。 " http://bit.ly/i2Nrgc

2011-01-06 12:32:52
若年寄(もう若くない) @kikairoya

真面目に戻り値見てリトライしてもいいが、その先にあるのは永遠に抜け出せないループだぞ

2011-01-06 12:33:06
若年寄(もう若くない) @kikairoya

ログ吐いて落ちるにしても、閉じられなければ落ちることも出来ないわけでさ

2011-01-06 12:33:58
プププランドのプリンス RiSK @sscrisk

stdio.h より低レベルなAPIは全然知らないけど何か怖いって事は分かった。

2011-01-06 12:37:41
若年寄(もう若くない) @kikairoya

パフォーマンス上げるために下層で勝手に遅延処理するのもいいけど、処理の失敗がリカバリ不能な時点になってから通知されるのは明らかに実装あるいはインタフェースがタコ

2011-01-06 12:39:18
プププランドのプリンス RiSK @sscrisk

あ,なんか,「malloc失敗したらどうすんの?」って問題思い出した。

2011-01-06 12:41:12
若年寄(もう若くない) @kikairoya

@sscrisk mallocの失敗はリカバリはできなくてもログ吐いて安全に落ちることはできる。closeは失敗されると書き出したデータもすべて飛んでる可能性あるから安全に落ちることすら不可能

2011-01-06 12:43:16
Shinji Kono @shinji_kono

@sscrisk read/writeぐらいは使ってください。

2011-01-06 12:43:46
プププランドのプリンス RiSK @sscrisk

@kikairoya ああ,ログすらダメになるってことですか?だとするとどうしようもないですねぇ。

2011-01-06 12:52:37
👻 道化師 🃏 @wraith13

@kikairoya それが可能であれば、失敗したことをユーザーに通知。 > closeの類が失敗した時のエラー処理

2011-01-06 12:57:38
若年寄(もう若くない) @kikairoya

@sscrisk にゃ、ログを取った後どうすればいいかを決められない。書き出したデータが無事かもしれないし、無事じゃないかもしれない。上書きできるかもしれないし、できないかもしれない。リトライで正常に閉じられるかもしれないし、閉じられないかもしれない。

2011-01-06 12:58:34
若年寄(もう若くない) @kikairoya

@wraith13 通知した後はリトライすれば閉じられるのか、データを再度書き出してやる必要があるのか、そもそもその状態で読みだしたデータに信頼性はあるのかとか

2011-01-06 13:00:38
👻 道化師 🃏 @wraith13

@sscrisk そこはツリーエラーモデルの出番です!(キリッ

2011-01-06 13:01:00
👻 道化師 🃏 @wraith13

@kikairoya そのプログラムがエディターなんかの類であれば、とりあえず通知だけして処理をキャンセルすれば、ユーザーがデータをクリップボードにコピペして難を逃れたりすることも可能になるですお。

2011-01-06 13:03:21