ラベル メモリマッピング の投稿を表示しています。 すべての投稿を表示
ラベル メモリマッピング の投稿を表示しています。 すべての投稿を表示

2011年9月24日土曜日

メモリマップドファイルを利用したデータの読み込み、編集、書き出し

メモリマップドファイルを利用し、ファイルからのデータの読み込み、編集、書き出しを行う例です。

メモリにファイルの内容をマッピングする際には、仮想メモリのページサイズ毎にマップされるので、出力されるファイルのサイズもページサイズの整数倍に合わせています(今回の例では、ページサイズは 4kByte)。

以下の例では、

MapFile が存在しない場合に実行: ページサイズの整数倍に合わせたサイズでファイルを作成しデータの出力
MapFile が存在する場合に実行: MapFile の内容を読み込んで編集しデータの出力
という形で MapFile の出力内容が変更されます。

出力されるデータは、"abcd .. xyz" のテキストを実行する度に "zyx ... cba" というように並びを反転させて出力しています。

実行結果

2011年9月7日水曜日

MD5 によるハッシュ値の計算

MD5 によるハッシュ値の計算の例です。

コマンドラインから openssl コマンドや、ハッシュ計算ソフト等でも計算可能ですので、計算値が正しいかどうか確認することができます。

例では、libcrypto に含まれるハッシュ値計算用の API を利用し、ファイルのハッシュ値を計算しています(コンパイルには -lcrypto が必要)。

int MD5_Init(MD5_CTX *c);
int MD5_Update(MD5_CTX *c, const void *data, size_t len);
int MD5_Final(unsigned char *md, MD5_CTX *c);

実行結果

2011年9月6日火曜日

SHA-1 によるハッシュ値の計算

SHA-1 によるハッシュ値の計算の例です。

コマンドラインから openssl コマンドや、ハッシュ計算ソフト等でも計算可能ですので、計算値が正しいかどうか確認することができます。

例では、libcrypto に含まれるハッシュ値計算用の API を利用し、ファイルのハッシュ値を計算しています(コンパイルには -lcrypto が必要)。

int SHA1_Init(SHA_CTX *c);
int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
int SHA1_Final(unsigned char *md, SHA_CTX *c);

実行結果

2011年4月3日日曜日

バイナリファイル対応の tail コマンド/ファイルのメモリマッピング

バイナリファイルにも対応した tail コマンドの例題です。

tail コマンドは、ファイルの最終行を表示するものですが、バイナリファイルの場合、改行が含まれないためにファイルの先頭から最後まで表示されてしまったりするため、非常に困ったことになる場合があります。

そこで、折り返すバイト数を指定したり、表示できない文字が含まれる場合には '*' や 16進数で表示したりすることができるようにしています。


ファイルの読み込みには、メモリマッピングを利用しています。

メモリマッピング (メモリマップドファイル: memory mapped file とも呼ばれる) は、ファイルの内容にアクセスする方法で、ファイルをアドレス空間にマップしファイル内容を配列のように扱うことができます。
ファイルサイズが大きいファイルにて読み込みを行う場合には、こちらの方がアクセスが早くなったりする場合があります。

実行結果

バイナリファイル対応の head コマンド/ファイルのメモリマッピング

バイナリファイルにも対応した head コマンドの例題です。

head コマンドは、ファイルの先頭行を表示するものですが、バイナリファイルの場合、改行が含まれないためにファイルの先頭から最後まで表示されてしまったりするため、非常に困ったことになる場合があります。

そこで、折り返すバイト数を指定したり、表示できない文字が含まれる場合には '*' や 16進数で表示したりすることができるようにしています。


ファイルの読み込みには、メモリマッピングを利用しています。

メモリマッピング (メモリマップドファイル: memory mapped file とも呼ばれる) は、ファイルの内容にアクセスする方法で、ファイルをアドレス空間にマップしファイル内容を配列のように扱うことができます。
ファイルサイズが大きいファイルにて読み込みを行う場合には、こちらの方がアクセスが早くなったりする場合があります。


実行結果

2011年3月31日木曜日

ファイルの行数読取り

ファイルの行数を取得する例題です。

実行結果

また、メモリマップドファイルを利用した例は、以下になります。