忘備録

年をとると忘れやすくなる。過去、これからのことを書き綴る。

着うたフル奮闘記(#2)

2006-01-01 01:38:08 | Weblog
着うたフルのファイル形式が"TAR"と解り、それならと作ってみることにした。
TARとは何か??昔とったなんとかでそこらあたりの知識はすこしある。
簡単に言ってしまえば、複数のファイルを結合したコンテナファイルであるが、各ファイルには必ずヘッダーが付く、すなわち、3個のファイルがあると仮定するならば{ヘッダー+1番ファイル}+{ヘッダー+2番ファイル}+{ヘッダー+3番ファイル}となる。
ヘッダー(512バイト)の構造は
ファイル名(100byte) -> このヘッダーを付けるファイル名 残りは0x00で埋める
属性(8byte) -> 0x81B6 8進数で記述 %07o 8byte目は0x00
ユーザーID(8byte) -> 0x02 8進数で記述 %07o 8byte目は0x00
グループID(8byte) -> 0x02 8進数で記述 %07o 8byte目は0x00
ファイルサイズ(12byte) -> 格納するファイルサイズ 8進数で記述 %11o 12byte目は0x00
更新日時(12byte) -> 8進数で記述 %11o 12byte目は0x00
チェックサム(8byte) -> ヘッダー部分のみチェックサム(512byte) %11o 12byte目は0x00
注:チェックサム(8byte)は0x20で埋め計算する。
タイプ(1byte) -> 0x30
リンク先ファイル名(100byte) -> なければ0x00で埋める
マジックコード(6byte) -> "ustar " 6byte目は0x00
バージョン番号(2byte) -> 0x2000
ユーザ名(32byte) -> "root" 残りは0x00
グループ名(32byte) -> "root" 残りは0x00
メジャーデバイス番号(8byte) -> ALL 0x00
マイナーデバイス番号(8byte) -> ALL 0x00
以後0x00 + 格納するファイルとなる。
TARのアライメントが512byteとなっている為、ファイルの後に0x00を付与する必要がある。
(ファイルサイズ + 511) / 512 * 512 = コンテナファイルサイズ
コンテナファイルサイズ - ファイルサイズ = 付与数(0x00)
ヘッダー + コンテナファイルサイズ = コンテナサイズ となる。
今の世の中はネットをくぐればあらゆる情報が一瞬にして手に入れることが可能な時代であるからTARについての情報ぐらいは簡単にわかると思われる。
ほんと!!昔からみれば便利な世の中に(笑)
チェックサム計算方法
uiSum = 0;
for( i = 0; i <TBL_SIZE; i++ )dummy[i];
for( i = 0; i <sizeof(m_lpHeader->dbuf.szChksum); i++ )
{
uiSum -= m_lpHeader->dbuf.szChksum[i];
uiSum += ' ';
}
::sprintf( m_lpHeader->dbuf.szChksum, "%07o", uiSum );

最新の画像もっと見る