SEEK_CUR)が0を返す?write()やその後のlseek()は合ってるのに?→同様の人、居た。write.つまり「毎回のwriteの直前に」としか書いていない。open(2)の直後ではないというわけだ。O_APPENDのキモは「writeする直前に自動lseek」である。いうわけで、プロセス二つ起動してwrite()させてみた。ttyA側でwriteした分がseekされてる。ttyB側でwriteした分がseekされてる。12O_APPENDをはずしてしまうと、writeの直前の自動lseek()が行われないため、各プロセス毎に独立してwrite(2)する。結果として、複数のプロセスが平行してwrite(2)したとき、他のプロセスがwrite(2)したデータを上書きしてしまう。ttyA側を無視して、オフセット0からwriteしてる。ttyB側を同様に無視。Links"Linux/UNIXと付き合い始めてはや6年。実は、これまでhardlinkをまともに使ったことが無いという事実。いや・・・だってさ・・・シンボリックリンクでほとんど事足りちゃうんだもん・・・。ごめんね、hardlink。ためしに、hardlinkしたファイルがファイルシステムをまたいでmvされちゃうとどうなるのか試してみた。..この時点で、こんな感じ。1250717)で、ファイルシステムをまたいでmvしてみる。ディレクトリをmvしてみる。/boot/...straceコマンドでシステムコールを追ってみると、ファイルを個別にコピーしたり、結構大変なことやってる。pfile2の方を見てみる。pfile2リンク数は1に減少してる。結局、この場合のmvはstrace結果からも分かるように実質的には"copy"だった。d_inoを参照するときは、マウントポイントか注意すること。d_inoはディレクトリの存在するファイルシステム上のi-nodeになる。マウントポイントの場合で、マウント先のファイルシステムのi-nodeを必要とする場合はd_inoは使えない。d_nameメンバを使って、stat(2)なども活用してディレクトリ階層をたどっていく。・・・これ、結構忘れそうだな・・・。「あ、わざわざd_name辿らなくても、d_inoがあるじゃん、ラッキー」ってなりそう。NULL)あ、コンマのこんな使い方あったんだ。C++のbool定義に関連したコンパイルエラーが発生したので、原因と対処方法をメモ。<curses.h>してる。一応bool定義の対処もされてるんだけど、CentOS5の場合はそれでは不十分。curses.hの中ではC++と互換性を持つboolを定義するstdbool.hを呼んでるんだけど、defs.hの中でもstdbool.hをincludeしてる。<curses.h>という順番になってる。stdbool.hでは二重includeを防ぐように_STDBOOL_Hマクロで囲まれてる。boolこの時点でstdbool.hはincludeされてるが、bool定義だけ欠落した状態。<stdbool.h>したあと、curses用の独自のNCURSES_BOOLをboolにdefineしてる。boolもしstdbool.hがまだincludeされていなかったのであれば、この時点で正常にbool定義がされるわけだが、今回のケースではずっと上のほうですでにinclude済みで、しかもbool定義はundefされている。結果として、bool定義自体はロストしたまま処理が進んでしまう。stdbool.hをもう一度includeさせる。_STDBOOL_Hを置けば、二重includeチェック用のマクロをクリアできるので、defineなどのプリプロセッサも再処理される。一応defs.hの中では、stdbool.hのincludeをSKIP_BOOLマクロでON/OFFできるようにはなってるんだけど、"-DSKIP_BOOL"をつけてみると今度は"common/ec.h"の中でもbool定義を使ってるのでそこでエラーになってしまう。事実上、defs.h中でのstdbool.hは外せない。う~ん・・・ポータビリティって難しいなあ・・・。設定するのも、sa_handlerにSIG_IGNを設定するのも効果は同等。子プロセスがゾンビにならないようにする。SIG_IGNを設定する方法はすべてのプラットフォームでサポートされているとは限らない、らしい。SA_NOCLDWAITはX/Openのほうで明文化されているので、SIG_IGNだけではなくてSA_NOCLDWAITも併用するのがオススメらしい。SIG_IGNとSA_NOCLDWAITの解説も併せて参照したい。state\n");という謎の"__func__"マクロがあり、これが未定義でコンパイルに失敗した。state\n");にしてコンパイルを通した。マルチスレッド+シグナル+fork-execの最凶タッグについて・・・いや・・・実務で使ったこと無いですよ・・・そんな、聞いただけで頭が爆発しそうな組み合わせ。Hacks"執筆協力されてるこの方、はてなダイアリのTOPで「昔のPOSIX関係の記事」に挙げてますけど、もうタイトル眺めただけでお腹一杯です・・・。HTTPD、結構スゴイのね。WebもPOSIX/SUSも、「標準規格」が後から作られてる影響が大きいせいか、「標準規格」だからといって鵜呑みに出来ないんだなってつくづく思い知らされた。11:05:47md5:433967107f6b8c05677c9e901801c448sha1:b5e588bb1f7976599ab01fc6fcc94c77afcb3062コメントコメントを投稿するにはログインして下さい。Kamiyamane。