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

なにやら色々入る。

ポケモン&メガテン

買ってしまうと他のことが出来なくなってしまいそうなので、我慢している。

ProductName 真・女神転生 STRANGE JOURNEY(ストレンジ・ジャーニー)

アトラス / ¥ 6,279 (2009-10-08)
一時的に在庫切れですが、商品が入荷次第配送します。配送予定日がわかり次第Eメールにてお知らせします。商品の代金は発送時に請求いたします。

Technasia

そういえば2002のmetamorphoseはtechnasia目当てでいったのだけど、朝方だったので、疲れてテントで寝ながら聴いてたのであった。

ProductName Future Mix
Technasia
Hardware / ?円 ( )


個人的にはcode redの曲とか入ってるPLUSとかいうmix albumのほうが好き。

ROVO

2002年にふらっと行った(ふらっと行ける距離に住んでた)metamorphoseで衝撃を受けたのが、ROVOだった(あとhifana)。U隊長も衝撃を受けたようで、それから半年くらいは、ずっとROVOメインで聴いてたような(今はcalmみたいだけど)。

ProductName FLAGE
ROVO
ファースト・エイド・ネットワーク / ¥ 2,800 (2005-06-01)


ProductName TONIC2001

Tzadik / ¥ 2,940 (2002-05-02)


ProductName MON
ROVO
ファースト・エイド・ネットワーク / ¥ 3,000 (2004-11-10)


ProductName live at liquidroom 2001.5.16
ROVO
ユニヴァーサルIMS / ¥ 2,415 (2002-07-06)


できればライブで聴くのがよい。さらにはraveで。日本ランドの時は日が落ちたところにあのスペーシーさにやられたんだったけな。

Unix/Linuxプログラミング理論と実践 7章 (シグナル)

シグナル

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

#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でやってみると二番目のシグナルはブロックされて、三番目以降のシグナルは無視される。

Glitch: Perfet Imperfections

欲しい

ProductName Glitch: Designing Imperfection

Mark Batty Publisher / 2839円 ( 2009-09-16 )


TODO:Glitchのコードを少しやる