7 月 17

自分の環境はwindows Vista + Cygwin + zsh です.

まず,環境変数LANG=ja_JP.SJISにすれば,lsなどの出力で日本語ファイル名が文字化けする問題は解決すると思います.

しかし,なぜかc言語で書いたプログラムをgccでコンパイルするときに出るエラーが文字化けしてしまいました.

この原因を解決するために
YACI/基本的な作り方 - Co-Coa Wiki
を参考にして,
環境変数OUTPUT_CHARSET=sjis
としてやると,無事に日本語で文字化けすることなく出力されました.

しかし,「警告: 制御が非void 関数の終りに到達しました」
という日本語のエラーメッセージはなんかかっこ悪い.

エラーメッセージは英語のほうが慣れているというのもあって,結局エラーメッセージを英語で出力することにしました.

それは、環境変数LC_MESSAGES=C
としてやるとokです.

環境変数を変える方法としては,コントロールパネルのシステムの詳細設定から変えるか,または.zshrc(bashの人は.bashrc)に

export LANG=ja_JP.SJIS
export OUTPUT_CHARSET=sjis
export LC_MESSAGES=C

などと記述してやればokです.

6 月 27

Phidgets というのは有名なセンサーノードの一つで,日本でも買えます.

Phidgets 取扱製品一覧 - ぷらっとオンライン

基本的なキット(おそらく5万円程度)で,明るさセンサ,タッチセンサ,圧力センサ,スライダーセンサ,つまみ型センサ などがついてくるんだと思います.詳しくはぷらっとオンラインのページをご覧ください.
自分は研究室にあったキットを使いました.

今回はプログラムを書くための準備の説明です.

LinuxにおいてPhidgetsを扱うプログラムを書くためには,まずPhidgetsのサイトから必要なものをダウンロードします.トップページから左側のメニューにあるDownloadsペンギンの絵をクリックします.

Step 1 と書いてある部分からLinux Sourceをダウンロードします.

Step 2 から開発プラットフォーム(今回はC/C++)を選んで,

Step 3 からC/C++のExamplesと, C API Manualをダウンロードしましょう.

最初にダウンロードしたファイル(Phidgetlinux_x.x.x.2008xxxx.tar.gzという感じの名前)を展開すると.Phidgetlinuxというファイルができると思います.中にはphidget21、webserviceというフォルダ,READMEがあるかと思います.

READMEを読めば分かるのですが,次にターミナルでphidget21のディレクトリまでいきます.

cd (展開したフォルダ名)/Phidgetlinux/phidget21

そこで,

make

sudo make install

と打つと,プログラムを行う準備ができます.

今日はここまで.

5 月 15

まずvalgrindの導入.

ubuntu-linuxであれば

sudo apt-get install valgrind

で入れることができる.

使いかたは,簡単.

まずプログラムを書いて,-gオプションをつけてコンパイルします.

gcc  -g hoge.c

そして,チェック

valgrind ./a.out

ではこれで実際どのようになるのか,簡単な例で見てみましょう.

hoge.c

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *num = malloc(10*sizeof(int));
num[10] = '1';
}

配列を越えて書き込んでいます.これをチェックすると

==3734== Invalid write of size 4==3734==  at 0x804839A: main (hoge.c:7)
==3734==  Address 0x417B050 is 0 bytes after a block of size 40 alloc'd
==3734==    at 0x4021620: malloc (vg_replace_malloc.c:149)
==3734==    by 0x8048390: main (hoge.c:6)
==3734==
==3734== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 1)
==3734== malloc/free: in use at exit: 40 bytes in 1 blocks.
==3734== malloc/free: 1 allocs, 0 frees, 40 bytes allocated.
==3734== For counts of detected errors, rerun with: -v
==3734== searching for pointers to 1 not-freed blocks.
==3734== checked 59,628 bytes.

などど出て,hoge.cの6行目で不正なメモリアクセスがあるとわかります.
本当はもっとたくさん文章が出てきます.

ですが,この程度のチェックならコンパイル時に

gcc -Wall -g hoge.c

とすれば,はじいてくれます.-Wallオプションもいつもつけるようにしましょう.