11102009 Linux
shを作っていく。この章から結構楽しい。
forkとwaitを使って子プロセスを制御する。
- 死んだのに未回収の終了ステータスを持っているプロセスをゾンビと呼ぶ
- execvp,execlpのpはpathから来ている
11102009 Linux
shを作っていく。この章から結構楽しい。
forkとwaitを使って子プロセスを制御する。
11102009 Linux
shをつくる
p.341
char *cp, *malloc();
これはi686-apple-darwin9-gcc-4.0.1だとエラーが出る
psh1.c:43: error: conflicting types for ‘malloc’
なので以下のように修正
char *cp;
extern void *malloc();
11102009 Linux
別のプログラムを起動するプログラム
#include <stdio.h>
int main()
{
char *arglist[3];
arglist[0] = "ls";
arglist[1] = "-l";
arglist[2] = 0;
printf("* * * About to exec ls -l\n");
execvp( "ls" , arglist );
printf("* * * ls is done. bye\n");
}
arglist[2]に0が入ってるのがわからん。arglist[0]はプログラム名であり変更できる。
#include <stdio.h>
int main()
{
char *arglist[2];
arglist[0] = "sleeeeeeeeeeeP!";
arglist[1] = "10";
printf("* * * About to exec ls -l\n");
execvp( "sleep" , arglist );
printf("* * * ls is done. bye\n");
}
これを実行してpsで見てみると
$ ps
PID TTY TIME CMD
149 ttys000 0:00.06 -bash
86661 ttys002 0:00.21 -bash
87689 ttys002 0:00.01 sleeeeeeeeeeeP! 10
コマンド名は実行した側が任意につけられるのか。
10102009 Linux
引き続きcursesライブラリを使って。7章は理解しながら読むのにちょっと時間がかかった。
Unixでは非同期入力のためにO_ASYNCを使う方法とaio_readを使う二種類があるらしい。前者は入力が読み出せるようになったときにシグナルを送り、後者は入力を読んだあとにシグナルを送るらしい。
MacPortsから
sudo port install py26-pil
なにやら色々入る。
買ってしまうと他のことが出来なくなってしまいそうなので、我慢している。
真・女神転生 STRANGE JOURNEY(ストレンジ・ジャーニー)08102009 music
そういえば2002のmetamorphoseはtechnasia目当てでいったのだけど、朝方だったので、疲れてテントで寝ながら聴いてたのであった。
個人的にはcode redの曲とか入ってるPLUSとかいうmix albumのほうが好き。
08102009 music
2002年にふらっと行った(ふらっと行ける距離に住んでた)metamorphoseで衝撃を受けたのが、ROVOだった(あとhifana)。U隊長も衝撃を受けたようで、それから半年くらいは、ずっとROVOメインで聴いてたような(今はcalmみたいだけど)。
できればライブで聴くのがよい。さらにはraveで。日本ランドの時は日が落ちたところにあのスペーシーさにやられたんだったけな。
08102009 Linux
シグナル
#include <stdio.h>
#include <signal.h>
#define INPUTLEN 100
int main(int ac, char *av[])
{
void inthandler(int);
void quithandler(int);
char input[INPUTLEN];
int nchars;
signal( SIGINT, inthandler );
signal( SIGQUIT, quithandler );
do {
printf("\nType a message\n");
nchars = read(0, input, (INPUTLEN-1));
if ( nchars == -1 )
perror("read returned an error");
else {
input[nchars] = '\0';
printf("You typed: %s", input);
}
}
while( strncmp( input , "quit" , 4 ) != 0 );
}
void inthandler(int s)
{
printf(" Received signal %d .. waiting\n", s );
sleep(2);
printf(" Leaving inthandler \n");
}
void quithandler(int s)
{
printf(" Received signal %d .. waiting\n", s);
sleep(3);
printf(" Leaving quithandler \n");
}
実行してみる
Type a message
^C Received signal 2 .. waiting
^C^C^C Leaving inthandler
Received signal 2 .. waiting
Leaving inthandler
macbookでやってみると二番目のシグナルはブロックされて、三番目以降のシグナルは無視される。
07102009 life