Entries from 2011-01-01 to 1 year
それは、shared_ptr のようなラッパーよりも、オブジェクト自体が参照カウンタをもっているほうがコードが書きやすいから。たとえば、継承したクラスでオブジェクトの参照カウントをいじることは、shared_ptr では難しい。shared_ptr を使った場合: class B…
SO_LINGER の秒数を 0 にしてソケットを閉じればいい。Perl で書くなら以下のような感じ。 setsockopt($sock, SOL_SOCKET, SO_LINGER, pack("II", 1, 0)) or die $!; $sock->close() 一方で RST によって切断 (=異常切断された) かどうかはソケットからの読…
sleep sort とか環境にやさしすぎて21世紀には不向きだと思うの。なので nicesort なるものを作ってみた。 #! /bin/bash function f() { nice -n "$1" perl -we 'for (1..1000000) {}' echo "$1" } while [ -n "$1" ] ; do f "$1" & shift done wait こんな…
http://www.yuyak.com/1339 を見て、Cによるsleep sortの実装がないのもどうかと思ったので書いてみた。シンプルですな。 #include <assert.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char** argv) { int values[] = { 1, 9, 5, 3 }; int i; for</unistd.h></stdlib.h></stdio.h></errno.h></assert.h>…
GCC 4.6.0 をがんばって OSX に入れたのに std::thread 使えなくて泣きながら修正。こんな感じすね。 #include <cstdio> #include <vector> extern "C" { #include <pthread.h> #include <unistd.h> } int main(int, char**) { int values[] = { 1, 9, 3, 6 }; std::vector<pthread_t> threads; for (auto& v </pthread_t></unistd.h></pthread.h></vector></cstdio>…
常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte streamを読んで、自分が書くとしたらこんな感じかなーと思った。多重化して select 使う必要ないよねということで。 use Time::HiRes qw(sleep); sub sleep_sort { # create pi…
% adb shell sh -c `adb shell ps | fgrep PROCNAME | awk '{print "\"echo kill -9 ", $2, "| su\""}'`
デーモン側をこんな感じで書きます。 use Errno qw(EEXIST); use Fcntl qw(S_IFIFO); use POSIX qw(mkfifo); my $FIFO_NAME = "/tmp/my_messenger.fifo"; if (mkfifo($FIFO_NAME, 0666)) { # ok } elsif ($! == EEXIST) { die "$FIFO_NAME is not a fifo!" u…
並走度1なら daemontools の setlock でいいんだけど。とりあえずこんなの書いた > https://github.com/kazuho/kaztools/blob/master/semaphorePOSIX Semaphore とか使うと異常終了時のカウントアップができないので強引に flock で。とりあえず困らないレ…
クラスを定義するだけで、そのクラスインスタンスが自動的に作られて登録されたりすると便利ですよね。たとえば、ビルド構成によって組み込まれるモジュールが変わる場合に、そのモジュールを Makefile に含めるだけで自動的サービスクラスが初期化されて登…
たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。たとえば、コールバック関数をセットする…