C言語

シグナルハンドラからprintf()はまずいです

http://d.hatena.ne.jp/XuHuang/20070916/1189924551 トラックバックは余りしないんだけど、気になったので。 もし知っているんだったらすいません。 printf()関数は非同期シグナルセーフでは無いです。 シグナルハンドラからprintf()はまずいと思います。 …

日付とカレンダーの同時表示

をしてほしい場合、dateとcalを使用しなきゃいけないのがめんどくさい。 つい、Cで作った。 #include <stdio.h> #include <stdlib.h> int main(){ system("date"); puts(""); system("cal"); return 0; } 今考えたらshで十分。 かなり疲れているみたい>自分。 無意識下ではCで考</stdlib.h></stdio.h>…

拡張ライブラリでHashを使う

拡張ライブラリ中でHashを使う方法がほとんど分からない。 README.EXT.jaにも書いていない。 ちょっと調べたのでメモ。 rb_hash_new()で空のハッシュをつくれる。 Rubyレベルの[]やHahs.newと同じ。 rb_hash_aset(hash, key, val)はhashに追加する。 逆に取…

CPU使用率取得

なんかCPU使用率取得を知りたいらしく検索してくるらしい。 Kernel2.6で試しに作ってみた。 ヒントは/proc/statのCPUの行。 この内容の意味はman procに書いてある。

pthread_cond

久しぶりにPthreadについて。 Ruby1.9のYARVではスレッドがRubyレベル出はなく、システムのスレッドを使用するようになる。 Ruby1.9のソースを眺めていたらpthread関係で、 pthread_cond系を使用していたのを見たのを切っ掛けにメモ。 普段からPthreadは使用…

Ethernetケーブルがささっているのか、抜けているのかを検出

http://www.komoto.org/etc/ethlink.html に書いてあった。 サンプルソースを見ると、ioctl()でSIOCETHTOOLオプションを渡している。 Linuxのみなのかな? 他のUnixでも使えたら便利なんだけど。

固定文字列への書き込み

以下のコードがあるとする。 char *str = "abc"; str[0] = 'A'; これは通常 or 最近のOSならばエラーとなる。 しかし、DOSなどの一部のOSでは問題なく動作する。 gccでこれと同様のことを行うには、-fwritable-stringsオプション を付ければ可能になる。 gcc…

末尾再帰の最適化オプション

-foptimize-sibling-calls 再帰を使用する場合には、スタックを食いつぶさないために 上記オプションを使用すること。 Schemeを少しかじったせいで、リスト処理何かはcar、cdrとか再帰を使いまくり。 なれたら再帰の方が楽な場合って結構ある。 ちょっと考え…

-lpthreadと-pthread

環境はLinux。 少し古いgccでは-lpthreadと-pthreadのふたつがあった。 lpthreadは何か問題があって使わずに、 pthreadを使うようにと言われていた。 家のLinux(Kernel2.6、gcc4系)では-lpthreadが存在しない。 MANにも存在しない。 いつのまにやら削除され…

SUNのマニュアル

http://docs.sun.com/app/docs/doc/819-0390

スケジューリング関係

Pthreadのメモ続き 今日はスケジューリングについて。 スケジューリングポリシーについて pthread_attr_t attr; pthread_attr_init(&attr); /* スケジューリングポリシーを取得する */ pthread_attr_getschedpolicy(&attr, SCHED_RR); /* ラウンドロビンに設…

Unixドメイン・ソケットで相手の「認証」を行う方法

http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/sockets.html /* fd= file descriptor of Unix domain socket connected to the client you wish to identify */ struct ucred cr; int cl=sizeof(cr); if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED…

TLSが使えない

PPCで使用したら何故かSIGSEGVが発生して使用できない。 i686では普通に使用できるのに。 色々調べたらここに原因が書いてあった。 どうやらGCC3.4からサポートしているみたい。

timevaltimesec変換マクロ

sys/time.hにあった。 #ifdef __USE_GNU /* Macros for converting between `struct timeval' and `struct timespec'. */ # define TIMEVAL_TO_TIMESPEC(tv, ts) { \ (ts)->tv_sec = (tv)->tv_sec; \ (ts)->tv_nsec = (tv)->tv_usec * 1000; \ } # define TI…

スレッド間のデータの受け渡し その他編

上記以外で処理速度を気にしない場合はLocal IPC(socketpair())かpipe()をよく使用する。 他のIPCは余り使用したことが無い。

スレッド間のデータの受け渡し volatile編

mutexを使用したくない場合はvolatileを使用すること。 ただし、これはできるだけ使用しない方が良い。

スレッド間のデータの受け渡し mutex編

プロセス間ではIPCを使用するが、 スレッドの場合メモリを共有しているので普通は共有変数(グローバル変数)だけでよい。 共有変数を使用する場合は値を保証するために、 複数スレッドからのアクセス制御を行わないといけない。 アクセス制御を行うにはmutex…

time wrapper

ふと思い付き、gettimeofday()/setttimeofday()のテスト用に作成しました。 元ネタは、failmallocです。 とはいえ、思い付きでさらっと作成したのでバグがあるかも。

Pthreadのコンパイルオプション

昨日書き忘れていたので書いておく Linuxのpthreadのコンパイルでは-lpthreadsとするのは間違い。 -pthreadとすること。 http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html Linux でのコンパイル Linux では、Pthreads API を用いたプログ…

スレッド生存確認方法

上記の方法を行うと別の問題が発生する。 本来終了して欲しくないスレッドが、なんらかの理由により終了した場合 それを知る方法が無い。 pthread_join()を行っていればスレッドが終了したのを知るのは可能だが、 デタッチ属性にした場合はpthread_join()が…

スレッド作成

Pthreadは普段から使用するので自分のために今後もまとめていく。 Pthreadのドキュメントはpthreads(7)から読んで行くと良い。 JM:http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html die.net:http://www.die.net/doc/linux/man/man7/pthre…

Bit計算

Bit計算の色々なテクニックがまとまっていたのでメモ(英語)。 http://graphics.stanford.edu/~seander/bithacks.html Bit計算は元々苦手なのでこいうのはありがたい。 下の本も持っているので併用して利用していけばいいかな。ハッカーのたのしみ―本物のプロ…