ksetenv (環境変数もファイル)

環境変数の設定はksetenv関数で行なっている.環境変数は名前と値の組だから,単純にハッシュでも作っているのかなと思ってしまうが,Plan9では,環境変数もファイルとして表わされることを思い出そう.
環境変数cputypeの場合は,#e/cputypeというファイル名のチャネルを生成し,"386"をファイルに書き込んでいる.これからわかるようにデバイスドライバは"#デバイス名/"から始まるファイルツリーとして,リソースをファイルに対応付ける.envデバイスの場合は,フラットなツリーになるけど.そして,"bind #e /env"と実行すると,#e/cputypeは/env/cputypeという別名を持つことになる.

port/devenv.c
  384: void
  385: ksetenv(char *ename, char *eval, int conf)
  386: {
  387:         Chan *c;
  388:         char buf[2*KNAMELEN];
  389:         
  390:         snprint(buf, sizeof(buf), "#e%s/%s", conf?"c":"", ename);
  391:         c = namec(buf, Acreate, OWRITE, 0600);
  392:         devtab[c->type]->write(c, eval, strlen(eval), 0);
  393:         cclose(c);
  394: }