Unix/Linuxプログラミング理論と実践 9章 (shをつくる)

if elseなどの制御文や変数を取り扱えるようにして、環境変数にも対応させる。

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

forkするときに環境をどう受け継がせるかとか。

イカの塩辛を作った

イカの塩辛を作る際に柚子の皮をちょっとまぶしておくと香りが良くなる。

明日か明後日食べごろなのでそれにあわせてなんか日本酒を買ってくる。

Unix/Linuxプログラミング理論と実践 9章 (環境)

環境は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
  • ハッシュでなくて、配列にxxx=XXXみたいに格納されているのがちょっと意外だ
  • 環境変数にアクセスするには単にextern char **environでいい

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

Röyksopp

二枚目のremixに素晴らしいものが多い(silicon soulとかroni sizeとか)

ProductName メロディーA.M.-スペシャル・エディション-(CCCD)
ロイクソップ
EMIミュージック・ジャパン / ¥ 3,000 (2003-06-18)
在庫あり。

これ聴くとライブは一回は体験しておきたいと思う。

ProductName LIVE EP-ROYKSOPP’S NIGHT OUT-(来日記念盤)(CCCD)
ロイクソップ
EMIミュージック・ジャパン / ¥ 1,500 (2006-02-01)


cpanのgpgエラー

cpanコマンドでinstall CPANすると

警告: 構成ファイル「/Users/xxxx/.gnupg/gpg.conf」の安全でない所有者

となるのは-Hオプションをつけてないから。

sudo -H cpan CPAN

とやればよろしい。

ProductName 初めてのPerl 第5版
Randal L. Schwartz
オライリージャパン / ?円 ( 2009-10-26 )


Unix/Linuxプログラミング理論と実践 8章 (sh続き)

shを作っていく。この章から結構楽しい。

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

forkとwaitを使って子プロセスを制御する。

  • 死んだのに未回収の終了ステータスを持っているプロセスをゾンビと呼ぶ
  • execvp,execlpのpはpathから来ている

Unix/Linuxプログラミング理論と実践 8章 (sh)

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();

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

Unix/Linuxプログラミング理論と実践 8章 (execvp)

別のプログラムを起動するプログラム

#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

コマンド名は実行した側が任意につけられるのか。

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

Unix/Linuxプログラミング理論と実践 7章 (イベント駆動プログラミング)

引き続きcursesライブラリを使って。7章は理解しながら読むのにちょっと時間がかかった。

ProductName Unix/Linuxプログラミング理論と実践
Bruce Molay
アスキー・メディアワークス / ¥ 6,090 ()
在庫あり。

Unixでは非同期入力のためにO_ASYNCを使う方法とaio_readを使う二種類があるらしい。前者は入力が読み出せるようになったときにシグナルを送り、後者は入力を読んだあとにシグナルを送るらしい。

macbookにPIL

MacPortsから

sudo port install py26-pil

なにやら色々入る。