2007-09-01から1ヶ月間の記事一覧
プログラムがexecされた時、シグナルハンドラは継承されない。また、シグナルの登録状況はSIG_IGN(無視)のもののみが継承され、他のシグナルはSIG_DFE(デフォルト)にリセットされる。一方、プロセスがforkされた時、子は親のシグナルハンドラと登録状況を継…
#include #include "ourhdr.h" /* シグナルハンドラの定義 */ static void sig_usr(int signo) { if (signo == SIGUSR1) { printf("received SIGUSER1\n"); } else if (signo == SIGUSR2) { printf("received SIGUSER2\n"); } else { err_dump("received sig…
MTDは、メモリデバイス、特にフラッシュメモリを扱う為に、ハードウェアドライバと上位層(ファイルシステム等)との間に汎用インターフェースを提供するサブシステムである。ハードウェアドライバモジュールと上位層としてのユーザモジュールとの2種類のモジ…
子プロセスが終了するのを待ちたくないし、かといって子プロセスをゾンビにしたくない場合、fork()を2度呼ぶ方法がある。 #include #include #include "ourhdr.h" int main(void) { int res; pid_t pid; pid_t ppid; pid = fork(); if (pid 0) { /* 子プロセ…
カーネルは、終了したプロセスに関する情報を保存しておき、プロセスの親がwait()やwaitpid()をcallした時にその情報を利用出来るようにする必要がある。必要最小限の情報は、プロセスID、終了状態、CPU時間である。親プロセス側からwait操作が行われること…
標準入出力のバッファリングには、行バッファリングと完全バッファリングがある。標準出力が端末に繋がっていると行バッファリングされ、それ以外の時は完全バッファリングされる。 下記のfork()の使用例では、標準出力に対して出力した場合、行バッファなの…
以下はGRUBでのx86のブートプロセスだが、やや曖昧な部分があるので、いずれ補完が必要だと思う。 電源投入後、CPUはシステムメモリの最後部を見てBIOSプログラムを探し、実行する。 BIOSは、システムをブートする有効なデバイス(CD-ROM, FDD, HDD等)を探す…
●textセグメント プログラムの命令群。 ●dataセグメント 初期化されたデータセグメント。初期化された変数を保持する。 ●bssセグメント 初期化されないデータセグメント。プログラムの開始前にカーネルによって0に初期化される。 アセンブラの"block started…
短縮形 同義語 備考 =============================================================================================== getchar() fgetc(stdin), getc(stdin) gets(buf) fgets(buf, BUFSIZE, stdin) gets()は絶対に使用してはならない。 printf(args) fpr…
lstat()で取得する情報のうち、st_devとst_rdevは混同しがちなので注意する。 #include #include #include "ourhdr.h" int main(int argc, char *argv[]) { int i; int res; struct stat buf; for (i = 1; i ファイルシステムのメジャー装置番号(ディス * ク…
nftw()は、ファイルツリーを歩きまわる関数。以下が使用例。 #define _XOPEN_SOURCE 500 /* ftw.hのinclude前にdefineしなければならない */ #include #include #include #include #define ARG_MAX 50 /* 値に根拠は無い。もっと小さくても良いはず。 */ sta…