POSIX

ミニマルなHTTPサーバ

http://0xcc.net/blog/archives/000178.html このコードには長時間動作させる上で明らかにマズい点が二つあります。 (22:58追記: 問題のコードは既に修正されています。高林さん、すばやい対応ありがとうございます。) 「UNIXネットワークプログラミング」の…

マルチスレッドと環境変数

BBv2のjamファイルでテストしようと思ったら、環境変数をサポートしていなくて全然動きませんでした。 というわけでbjam::contextに環境変数を追加しました。 get_environment_strings() predefined_variables.hppの差分 環境変数の一覧は、WindowsではGetEn…

ファイル記述子の継承とマルチスレッド

今日は昨日の話のPOSIX版です。 Windowsのハンドルに対応する概念はPOSIXではファイル記述子です。 ファイル記述子もハンドルと同じく子プロセスに継承させることができます。(というかWindowsの方がマネしているんでしょうが。) 面倒なことに、ファイル記述…

device_number

今日はデバイス番号を格納する"PN" System Use Entryを実装しようと思ったのですが、アーカイバ毎にデバイス番号の持ち方が違うため、これらを抽象化するための構造体、device_numberを考えてみました。 <hamigaki/filesystem/device_number.hpp> POSIXではファイルのデバイス番号はdev_t型で、stat(</hamigaki/filesystem/device_number.hpp>…

cpio_file

結局、cpio_file_source/cpio_file_sinkを作りました。 cpio_file_sink_impl.hpp cpio_file_source_impl.hpp フォーマットの定数にposix(odc)、svr4(newc)、svr4_chksum(crc)、binary(bin)を用意していますが、まだposixしか対応してません。 GNU cpioの既定…

cpio

追記サポートが上手くまとまらず、気分転換にcpioフォーマットでも実装しようかなぁと思い、調べてみました。 フォーマット自体は単純なのですが、 ファイルサイズが32ビット(フォーマットによっては33ビットまでは可能) i-node番号が16ビット(正確には18ビ…

argv[0]

Binary Hacksがようやく届き、ざっと目を通しました。 HACK#64の「実行中のプロセスのパス名をチェックする」を読んで、実行中に実行ファイルを移動したらどうなるのかと思い、試してみました。 まずは、Linux。(ファイル移動の時間稼ぎのためgets()が入って…

symlink_target()

とり急ぎPOSIX用の実装を追加しました。 symlink.cppの差分 read_link()はsymlink_target()に変えました。 stat()でサイズを調べてからreadlink()を呼ぶまでに競合状態があります。 クラッシュするわけではないので良しとしましょう。 DQコンサートがあるん…

型のメモ

SUSv3から抜粋 uid_t、gid_tは整数型(符号のある/なしは環境に依存) pid_tは符号付き整数型 time_t、clock_tは整数型または浮動小数点数型

posix::user_context_impl

coroutineのコードを整理しつつ、POSIXのucontextを使った実装も追加しました。 <hamigaki/coroutine/detail/posix_user_context.hpp> スタック用のメモリはHamigaki.Detailのvirtual_memoryを使っています。 Hamigaki.Detailはヘッダファイルからインクルードしないはずでしたが、早くも破綻です。 ucontextはf</hamigaki/coroutine/detail/posix_user_context.hpp>…

mmapとmprotect

またcdecl_thunkをg++に移植した時の話です。 サンクような自己書き換えコードを実行可能にするためには、OSのメモリ保護のモードを変更する必要があります。POSIX環境でこれを実行する関数はmprotect()です。 規格によると、mprotect()はmmap()で確保したメ…