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: }