2012年12月27日木曜日

C言語 デバッグ用マクロ

http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic-Macros

#define DMSG_ERR( p_fmt, ...) printk(KERN_ERR "cpu:%d %s:%d (%s) " p_fmt, smp_processor_id(), __BASENAME__, __LINE__, __func__, ## __VA_ARGS__)
#define DMSG_WARNING(p_fmt, ...) printk(KERN_WARNING "cpu:%d %s:%d (%s) " p_fmt, smp_processor_id(), __BASENAME__, __LINE__, __func__, ## __VA_ARGS__)
#define DMSG_NOTICE( p_fmt, ...) printk(KERN_NOTICE "cpu:%d %s:%d (%s) " p_fmt, smp_processor_id(), __BASENAME__, __LINE__, __func__, ## __VA_ARGS__)
#define DMSG_INFO( p_fmt, ...) printk(KERN_INFO "cpu:%d %s:%d (%s) " p_fmt, smp_processor_id(), __BASENAME__, __LINE__, __func__, ## __VA_ARGS__)



2012年12月20日木曜日

Programing memo

・デバッグ分出力のバイナリをデフォルトで生成するようにしておく。
・いたるところに、デバッグ文出力用マクロを挿入しておく。
 どこまで通過したか判るように。



2012年12月19日水曜日

zip unzip 指定ファイルの解凍

zip unzip 指定ファイルの解凍

$ unzip archives.zip mydir/my.iso -d /home/user



(DVD)メディアのチェックサム md5sum

チェックサム md5sum

(DVD)メディアは単純にチェックサムを比較することが出来ない。
http://www.debian.org/CD/faq/index.ja.html

$ /usr/bin/isosize -x /dev/hdc
sector count: 4425, sector size: 2048
$ dd if=/dev/hdc count=4425 bs=2048 | md5sum




書き込み済みの光学メディアを検証する場合
メディアの種類によっては ISO イメージにあるものよりも多くのバイト数を返してくる可能性
この後方に付くゴミは TAO モードで書き込まれた CD、追記された DVD-R[W]、
フォーマット済みの DVD-RW, DVD+RW, BD-RE、さらに USB キーの場合不可避
ISO イメージ自体にあるのと正確に同数のセクタのデータをメディアから読み込む必要があり
メディアからそれ以上に多くのバイトを読み込んだ場合チェックサムの結果は違うものになる



2012年12月14日金曜日

環境変数

forkした子プロセスは、環境変数も引き継ぐ。
getenv
putenv
setenv
unsetenv
environ (7) 大域変数
clearenv すべての環境変数をクリアする(空にする)posixでない!?

su コマンドを '-' 付加して実行すると、環境変数は引き継がない。
シェルをログインシェルにする。


/etc/profile.d/*.sh に環境変数を設定する各種スクリプトがある。


すべての環境変数を表示する。
$ gcc -Wall -o my_printenv my_printenv.c
#include <stdio.h>

extern char **environ;

int main()
{
char **ep = environ;
char *p;

FILE *fptr;

fptr = fopen("/tmp/xxx.txt", "a");

fprintf(fptr, "-------------\n");

while ((p = *ep++))
fprintf(fptr, "%s\n", p);

fclose(fptr);

return 0;
}



2012年12月11日火曜日