C言語

GNU catとかGNU grepを読んでみた

最近少し理由があって、GNU catとGNU grepのソースを読んだので少しメモ ソースコード入手 GNU catですが、catのような基本コマンドはcoreutilsというパッケージになっていますのでこれをダウンロードします。 http://www.gnu.org/software/coreutils/ gitは…

prctl(2)でプロセスを色々操作できるらしい

http://mkosaki.blog46.fc2.com/blog-entry-946.htmlで知った。 ただし、Linux専用のシステムコール。 親プロセス死亡シグナルを設定できたり、コアダンプ生成のコントロールとか色々便利そうだけど危険な香りが。 名前を設定出来ると有ったのでpsした名前を…

BSDでもぶら下がりif文なのか

前の記事の続きになるのかな。 http://techblog.yahoo.co.jp/cat207/how_to/kill/ BSD系のソースはほとんど読んだことが無いので参考になる。 BSDでも当たり前にぶら下がりif文使ってますね。 if(cond) break; if(cond) goto HOGE; while(flag==1) break; と…

コーディングルールについて

まあ基本的なことが書いてあるけど、いくつか注意。 http://eetimes.jp/article/23004/ ルール1 つまり「ぶら下がり型if文の禁止」。 基本はこの通りなんだけどLinux Kernelだとむしろ推奨していたりする。 http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.…

インデント

自分にとっては、もっとも経験が長いC言語。 それなりに自分流の書き方があるんだけど最近JFのLinux カーネル コーディング規約を呼んで色々気になり出してきた。 まあ基本はK&Rなんだけど細かい所を色々自分流にしている。 タブ幅を4にしていたり(とはいっ…

http://d.hatena.ne.jp/longicorn/20080816#p1

なんかリファラーをみると以前書いた内容についてリンクされていた。 http://slashdot.jp/~hix/journal/455780 (中の人かな) どうも自分が指摘した問題は関係ないみたい。 つまり違う問題らしい。 2894 unsigned char buffer[sizeof(sharedSegmentMsg) + MAX…

pthread_create SIGSEGVで検索してくるひとが

pthread_create()した時にSIGSEGVするんだったらメモリ破壊してそう。

select()のソース

http://shinh.skr.jp/m/?date=20081008#p01 http://d.hatena.ne.jp/shinichiro_h/20081010#1223567210 をきっかけにちょっとkernel(2.6.22)内部を見てみた。

Lex & YACC

なんとなくイメージだけは掴めてきたのでちょっと休むかも。 実際には使いこなせてないし、他にやりたいことが出てきたので。 気が向いたらそのうちに。

Lex & YACC 5

http://d.hatena.ne.jp/longicorn/20080928#p1 バグの原因が分かった。 parse.y %% commands : | commands command ; command : STRING EQUAL NUMBER { printf("%s = %d\n", (char*)$1, $3); free((char*)$1); } ; %% commandsを追加すればOK。 考えてみりゃ…

Lex & YACC 4

http://d.hatena.ne.jp/longicorn/20080917#p1の続き http://d.hatena.ne.jp/longicorn/20080923#p1で本が無かったのでネットで勉強を続けてみる。 取りあえず簡単な構文解析。 フォーマットは hoge = 111 という「変数=数字」の形式を想定してみる parse.l …

Lex & YACC 3

http://d.hatena.ne.jp/longicorn/20080910#p1 の続き。 自前で構文解析の練習の前に課題が1つ。 今まで標準入力からのみだったけどファイルからの入力に対応する必要が有る。 yyinという変数があるのでそれにFILEポインタを与えればいいらしい。 extern FIL…

Lex & YACC 3

上で最後に書いた実際の場合について。 実際に使う場合は上の場合よりも複雑になっていき、上記の様な方法だけでは不可能。 ちょっと調べたら、方法は大きく分けて2通りの方法があるみたい(調べた限りではだけど)。 1つはコマンド(BNF)の部分、「heat_switch…

] Lex & YACC 2

前回の続き %{ #include <stdio.h> #include "sample4.tab.h" void yyerror(const char *str) { fprintf(stderr,"error: %s\n",str); } int yywrap(void) { return 1; } %} %% [[:digit:]]+ yylval=atoi(yytext); return NUMBER; heat return TOKHEAT; on|off yylval=</stdio.h>…

Lex & YACCを急に触ってみた

この前の土日に急にLex & YACCを触りたくなって、ここ数日ずっと触っていた。 http://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html を見ながら勉強中。 Lexのみの部分ならば例題を見ながらで動くんだけど、YACCの章に入るとこのページを見ながらだけでは…

全pidを取得する

仕事でストレスが溜まってきたので何となく作ってみたへたれプログラム。 /proc以下からpidのディレクトリ名を取得してくる。 realloc()なんかまず動作しないけどね。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <dirent.h> int *pid_list(void){ int pid; DIR</dirent.h></sys/types.h></string.h></stdlib.h></stdio.h>…

メモリをFILE型として扱う2

http://d.hatena.ne.jp/longicorn/20080624#p1 を実際に試してみた。 char型のメモリに文字列を書き込むと言うだけ #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char *p; char buf[1024]; p = malloc(1024); if(p==NULL){ return 1</stdlib.h></stdio.h>…

メモリをFILE型として扱う

http://d.hatena.ne.jp/longicorn/20080606#p2 の続き GNU拡張でよければfmemopen(3)、open_memstream(3)で出来るみたい。

Programing Tool

CFAQ 18.1のようなツールってある程度以上(規模とか腕とか)になると必要になってくる。 けどこのリストって古いので普段自分が使っているのをメモ。 Linux用なのでUnixだったら多分使えるけどWindowsは辛いかも(Cygwinとかで代用できる?) ソフトのリスト 目…

C/C++のポインタの機能--変数の場所(アドレス) - builder by ZDNet Japan

http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm http://slashdot.jp/developers/article.pl?sid=08/04/01/0451222 IT業界の末端の自分が言うのもなんだけどこれはひどいよね。 分からないんだったらこんな仕…

Cで継続をしたい

タイトル通りなんだけど、今のソースが無駄な処理を行っているので計算途中の結果(スタック)を保存して後で再開したい。 ローカル変数をグローバル辺りにバックアップしてという方法も有るんだけどスマートじゃないしなあ。 longjmp()も考えたんだけどスタッ…

ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 前編 - higepon blog

3章 ほんの少し深く(14:24) sizeof n 。カッコは不要知らなかった。 (たぶん)これって、Cでも同じだったはず。 しかしC++って普段使わないからあまり詳しくないのでこれはいい勉強になる。 構造体に関して疑問が一つ解消した。以下の Hige と Hage の 違い…

sizeofについて

http://d.hatena.ne.jp/isshiki/20080213 http://morihyphen.hp.infoseek.co.jp/log2/200802.html#020813 http://morihyphen.hp.infoseek.co.jp/log2/200802.html#02142 http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0802b.html#D20080212-3 http://…

いまさらBFインタプリンタ?を作ってみた

小一時間程かけて、適当に作ってみた。 ファイルから読み込んで実行するだけ。 メモリ管理はめんどくさいのでlibgc使用。

Pthread + Boehm GCの相性が悪い

以前解決したはずの Pthread + Boehm GCの問題が新たに出てきた。 mainからスレッドを作って、さらにそのスレッドでスレッド作成がどうもおかしい。 mainで全てのスレッドを作成すると問題が無いんだけどなあ。 ここ1週間以上悩んでて、試しにBoehm GCを外し…

ディレクトリの変更を知る方法

http://d.hatena.ne.jp/longicorn/20070925 で分からなかった、別の方法。 新しいカーネル(linux-2.6.13-rc3)以降ではinotifyがある。 助記以前のカーネルではdnotify(つまり以前書いたシグナルを使うのも)で代用できるらしい。 inotifyのサンプル http://sy…

Pthread + Boehm GCでSIGSEGV

仕事でテスト辺りが今のメイン作業なので、気晴らしに家でプログラムを作っている。 それで、ここ数日悩んでいたのが、Pthreadを使っている環境でBoehm GCのGC_malloc()を使うとSIGSEGVが発生する現象。 ネットで調べても解決しないかったので、解決した方法…

printf()系の実装

正確にはsprintf()の変形のasprintf()が欲しいんだけど事情があって自作したい。 けど情報が無いので取り敢えず作ったものを書いてみる。

配列の初期化

つい最近以下のようなコードを見た。 int hoge[10]; int i; for(i=0;i<10;i++){ hoge[i] = 0; } memset()使えよ。

Linux ディレクトリ通知機能 (ディレクトリ内で発生したイベントを受け取る仕組み)

http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.6/dnotify.txt.html JFを見ていたらこんなのを見つけた。 どうやら、特定のディレクトリ以下にファイルが作られたり、削除されたら検知する仕組みらしい。 検知はシグナルを使うみたいなのでスレッド内では…