タグ

ブックマーク / taiyo.hatenadiary.org (2)

  • getopts - コマンド "getopt", "getopts" の使い方を把握する - spikelet days

    目的 "getopt"は、Cライブラリもコマンド版も、どちらも使い方を覚えにくい。 ここでは、コマンド版 "getopt" と、sh/bash built-in の "getopts" の使い方をまとめる。 結果 sh/bash built-inのgetoptsが使える場合は、そちらを使った方が良い。 外部コマンド getopt 使用時は、クォート処理に気をつける。 速度的には、getoptとgetoptsどっちでも大して差はない。 getopts.sh https://sssvn.jp/svn/spikelet/sh/getopts.sh getopt-o.sh https://sssvn.jp/svn/spikelet/sh/getopt-o.sh 以下、詳細。 getopt を使う(クォート考慮なし) getopt(1)を参考にしつつ、素直に作成。 getopt.sh https:/

    getopts - コマンド "getopt", "getopts" の使い方を把握する - spikelet days
  • signal-piping - SIGNALをpipe経由でハンドラからメインスレッドに渡す方法 - spikelet days

    目的 Linux上(UNIX全般)で「安全な」シグナル処理を実装したい。 来シグナルハンドラでしてもよい処理は非常に限られており、実質は特定の型のグローバル変数操作と、非同期シグナルセーフ関数の呼び出ししか安全ではない(参考:UNIX上でのC++ソフトウェア設計の定石 (2) - memologue)。 この条件を守ったうえで、多用な処理をするシグナルハンドラを実装したい。 結果 別途、pipeとスレッド(メインスレッドでも良い)を用意して、 シグナルハンドラ: 受け取ったシグナル情報をpipeにwriteするだけ 別スレッド: pipeをreadしてその後の処理を実行 という役割分担にすれば良い。 以下、詳細。 「非同期シグナルセーフ」な関数 System Interfaces Chapter 2にあるように、非同期シグナルセーフな関数は、確かに少ない。 シグナルハンドラ内では使わなそ

    signal-piping - SIGNALをpipe経由でハンドラからメインスレッドに渡す方法 - spikelet days
  • 1