構造体のバイトアライメント

linuxへの移植中に?な経験.
次の構造体なんですが,挙動がおかしい.
typedef struct tagBITMAPFILEHEADER {
  WORD bfType;
  DWORD bfSize;
  WORD bfReserved1;
  WORD bfReserved2;
  DWORD bfOffBits;
} BITMAPFILEHEADER;
ファイルに保存してみると,bfTypeとbfSizeの間に2byteの空白ができてます.
色々と調べてみると,gccでは(?)x86では4byte毎に区切って構造体などを配置するようですね.
バイトアライメントというらしい.
VCと同じようにバイトアライメントを明示的に2byteにするには,
#pragma pack(push, 2)
typedef struct tagBITMAPFILEHEADER {
  WORD bfType;
  DWORD bfSize;
  WORD bfReserved1;
  WORD bfReserved2;
  DWORD bfOffBits;
} BITMAPFILEHEADER;
#pragma pack(pop)
または,次のように間を詰めるように指定すればok.
typedef struct tagBITMAPFILEHEADER {
  WORD bfType;
  DWORD bfSize __attribute__ ((packed));
  WORD bfReserved1 __attribute__ ((packed));
  WORD bfReserved2 __attribute__ ((packed));
  DWORD bfOffBits __attribute__ ((packed));
} BITMAPFILEHEADER;
bfReserved1以降の __attribute__ ((packed))は今の場合は必要ないですが.
参考:Using and Porting the GNU Compiler Collection (GCC) – C 言語ファミリに対する拡張機能

gcc と文字コード

gcc 3.4.0以降では,ソースやバイナリの文字コードを指定できる.
–input-charset=cp932 –exec-charset=cp932
SHIFT-JISの場合は,cp932で指定する.
Windowsのプログラムをlinuxでも動かせるように作業していて,
メインターゲットをdebian sargeにと思っているたのですが,version 3.3.5でした.
まぁ,文字コード変換のスクリプトをかませばいいのですが.

docomoのケータイ

普段はauのW42Sを使っているのですが,実は一月前からdocomoのケータイでも遊んでます.
SO902iWP+
ソニエリの防水のアレです.
充電完了するとVAIOと同じく「バッテリーの充電が完了しました.」
って言うんですよ.
最初に聴いたとき笑いました.
というわけで,最近は寝る前にW42SとSO902iWP+で遊ぶのが日課.
これまであまり積極的に触ってなかったせいか,初めて使う機能も多々あります.
TVリモコンを使ったり,FMラジオを聴いたり,とか.
今日は初めてSO902iWP+でEdyを使いました.
あと,「ガーネット」をSO902iWP+で聴いてみたり.
あと,docomoで契約した時にはW42SからSO902iWP+へアドレスコピーできませんでしたが,
赤外線全件転送であっさり送れました.
細かいところまでチェックしてませんが,おおよそ大丈夫でしたよ?
もう軽快電話とか必要ないかな?

ubuntuでSWAT

kubuntuでSWATを使う.
下記の参考そのままですが.
そうかー,inetdがないとSWAT動かないのね.
で,インストールする.
sudo apt-get install netkit-inetd
あとは,debianの場合と同じですね.
参考:Ubuntuでswatが起動せずにハマッた件
蛇足ですが,
red hat(xinetd) → debian(inetd) → ubuntu(ナシ)と,
デスクトップでは変遷してきましたが,私って退化してる?

C1VJでubuntu

PCG-C1VJでubuntuに再チャレンジ.
CDでの起動時に
F2を押して,日本語を選択.
F6を押して,ide2=0x180,0x386を追加.
以前は
Mounting root file system…
で止まっていたが,前回よりもすすむ.
が,
Loading Hardware Drivers
でこける.
今日はここまで.

mysqlメモ

mysql のデータベースバックアップ用スクリプト
#!/bin/bash
PASSWD=xxxx
DATE=’date +%Y%m%d’
mysqldump -u user -p$PASSWD xxx_db > “/home/user/xxx_db.`$DATE`”
リストアは,
(もし無ければ)あらかじめxxx_dbを作っておく.
mysql>CREATE DATABASE xxx_db;
# mysqldump -u user -p xxx_db < /home/user/xxx_db.yyyymmdd

ssh での文字コード

sshで異なる文字コードの端末から接続する.
ssh -i ~/xxx user@192.168.y.y | nkf -w -u
なるほど,sshで設定できない(?)ので,パイプしてnkfすると.
clientがkubuntuの場合 -w でUTF8に変換.
参考:http://code-air-edge.cocolog-nifty.com/blog/2005/03/index.html

ext3が見えます.

Windows & kubuntu のデュアルブートマシンで,
Windowsからkubuntu(ext3)のファイルをのぞく.
explore2fs
RedHatのころ使っていたexplore2fsですが,
ext2は見れてもext3はダメだったと思っていたのですが,
すんなりOK!
でもUTF8なので文字化け〜,
と思ったのですが,これも最新の1.08beta7でOKですた!

無線LAN,やたっ!

kubuntu で無線LAN
無線LANのモジュールを認識してくれてました.
インターネット/Wireless Assistant(ワイヤレスLANマネージャ)で設定して,
つながった!
Linux で初めて無線LANできました.
残すは,W42Sでダイアルアップです.

ハイバネート,やたっ!

kubuntuでハイバネする方法がわかりました.
システム設定/ハードウェア/Laptops&Power/ラップトップバッテリで
ACPI Configタブを開いて,Setup Helper Applicationボタンを押す.
これで/usr/bin/klaptop_acpi_helperが使えるようになります.
ハイバネするときは,
/usr/bin/klaptop_acpi_helper –hibernate
復帰するときは,grubメニューのrecovery.
普通に起動.
linuxで初めてハイバネできました!
というかできることに気づいてなかった…
とりあえず,メニューにボタンで追加しておきました.