12102009 Linux
if elseなどの制御文や変数を取り扱えるようにして、環境変数にも対応させる。
forkするときに環境をどう受け継がせるかとか。
12102009 Linux
if elseなどの制御文や変数を取り扱えるようにして、環境変数にも対応させる。
forkするときに環境をどう受け継がせるかとか。
12102009 Linux
環境はenvironが指す配列に格納されている。
環境変数一覧を出力してみる。
#include <stdio.h>
extern char **environ;
main()
{
int i;
for( i = 0 ; environ[i] ; i++ )
printf("%s\n",environ[i]);
}
実行結果の一部。
EDITOR=/usr/bin/vim
LANG=ja_JP.utf-8
HISTCONTROL=ignoreboth
SHLVL=1
11102009 perl
cpanコマンドでinstall CPANすると
警告: 構成ファイル「/Users/xxxx/.gnupg/gpg.conf」の安全でない所有者
となるのは-Hオプションをつけてないから。
sudo -H cpan CPAN
とやればよろしい。
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
なにやら色々入る。