このBlogは移転しました。今後は aish.dev を御覧ください。

APUE

Pythonで学ぶ「詳解 UNIXプログラミング」(その17) おしまい

以上でPythonで学ぶ「詳解 UNIXプログラミング」シリーズを終える。軽いネタのつもりで書き始めたが、サンプル一つ一つにきちんと目を通すのはなかなか楽しく、思ったよりも時間がかかってしまった。短期間にこんなにたくさんのos.fork()を書いたのは初めて…

Pythonで学ぶ「詳解 UNIXプログラミング」(その16) 第19章 擬似端末

19.1 〜 19.3 Pythonのpty.fork()でptyのオープンとforkを行うことができる。pty.fork()はこのサンプルと同等の機能が実装されており、Linux/BSD/Solaris/Cygwin等の各プラットフォーム対応のコードが入っている。ただし、子プロセス側でのtermioとウィンド…

Pythonで学ぶ「詳解 UNIXプログラミング」(その15) 第15章〜第18章

以下の章 第15章 高度なプロセス間通信 第16章データベースライブラリ 第17章 PostScriptプリンタとの通信 第19章 モデムの発信 のサンプルは省略する。第15章ではプロセス間でファイルディスクリプタを受け渡す技法を解説しているが、この技法はPythonでは…

Pythonで学ぶ「詳解 UNIXプログラミング」(その14) 第14章 プロセス間通信

14.1 パイプを介して親から子へデータを転送する import sys, os r, w = os.pipe() pid = os.fork() if pid: # parent os.close(r) os.write(w, "hello world\n") else: # child os.close(w) line = os.read(r, 80) print line 14.2 ページ表示プログラムへ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その13) 第13章 デーモンプロセス

13.1 デーモンプロセスの初期化 import sys, os pid = os.fork() if pid: sys.exit(0) # parent goes bye-bye # child continues os.setsid() # become session leader os.chdir("/") # change working directory os.umask(0) # clear out file mode creatio…

Pythonで学ぶ「詳解 UNIXプログラミング」(その12) 第12章 高度な入出力

12.1 ブロックしない大量のwrite import os, sys, fcntl buf = sys.stdin.read() print >>sys.stderr, "read {0} bytes".format(len(buf)) wrote = 0 fno = sys.stdout.fileno() val = fcntl.fcntl(fno, fcntl.F_GETFL, 0) fcntl.fcntl(fno, fcntl.F_SETFL, …

Pythonで学ぶ「詳解 UNIXプログラミング」(その11) 第11章 端末入出力

11.1 割り込み文字を無効にし、ファイルの終わりの文字を変更する import os, sys, termios if not os.isatty(0): sys.exit("standard input is not a terminal device") vdisable = os.fpathconf(sys.stdin.fileno(), "PC_VDISABLE") if vdisable < 0: sys.…

Pythonで学ぶ「詳解 UNIXプログラミング」(その10) 第10章 シグナル

10.1 SIGUSR1とSIGUSR2を捕捉する簡単なプログラム import signal def sigusr(signo, frame): # one signal handler for both signals print "received", "SIGUSR1" if signo == signal.SIGUSR1 else "SIGUSR2" signal.signal(signal.SIGUSR1, sigusr) signa…

Pythonで学ぶ「詳解 UNIXプログラミング」(その9) 第9章 プロセスの関係

9.1 オーファンドプロセスグループの作成 import sys, os, time, signal, traceback def pr_ids(name): print "{0} pid={1} ppid={2} pgrp={3}".format( name, os.getpid(), os.getppid(), os.getpgrp()) def sig_hup(signum, frame): print "SIGHUP receive…

Pythonで学ぶ「詳解 UNIXプログラミング」(その8) 第8章 プロセス制御

8.1 fork関数の例 import sys, os, time glob = 6 buf = "a write to stdout\n" STDOUT_FILENO = sys.stdout.fileno() def main(): global glob var = 88 # automatic variable on the stack os.write(STDOUT_FILENO, buf) # we don't flush stdout print "b…

Pythonで学ぶ「詳解 UNIXプログラミング」(その7) 第7章 プロセスの環境

7.1 終了ハンドラの例 import atexit def my_exit1(): print "first exit handler" def my_exit2(): print "second exit handler" atexit.register(my_exit2) atexit.register(my_exit1) atexit.register(my_exit1) print "main is done" Python 2.6以降では…

「詳解UNIXプログラミング」のひみつ

詳解UNIXプログラミングの小口を見ると、各章が区別できるように印が印刷されている。こんな感じだ。この印は5列からなっており、一列目は第一章から第七章、二列目は第八章から第一二章、三列目は第一三章から第一九章、四列目は付録、五列目は索引となっ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その6) 第6章 システムデータファイルと情報

6.1 getpwnam関数 import pwd def getpwnam(name): for rec in pwd.getpwall(): if rec.pw_name == name: return rec パスワードファイル関連の関数はpwdモジュール、シャドウパスワード関連の関数はspwdモジュール、グループファイル関連の関数はgrpモジュ…

Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ

5.1 getc()とputc()を用いて標準出力へコピーする import sys while True: c = sys.stdin.read(1) if not c: break sys.stdout.write(c) 5.2 fgets()とfputs()を用いて標準出力へコピーする import sys for line in sys.stdin: sys.stdout.write(line) Pytho…

Pythonで学ぶ「詳解 UNIXプログラミング」(その4) 第4章 ファイルとディレクトリ

4.1 指定したファイルの種類を出力する import sys, os, stat for filename in sys.argv[1:]: print "{0}:".format(filename), try: st = os.lstat(filename) except Exception, e: sys.exit("lstat error") mode = st[stat.ST_MODE] if stat.S_ISREG(mode):…

Pythonで学ぶ「詳解 UNIXプログラミング」(その3) 第3章 ファイル入出力

3.1 標準入力ファイルがシーク可能で有るかどうかを調べる import os try: os.lseek(0,0,os.SEEK_CUR) except OSError: print "cannot seek" else: print "seek OK" lseek()が失敗すると、OSError例外が発生する。 3.2 lseek()でファイル内部に間隙を作成す…

Pythonで学ぶ「詳解 UNIXプログラミング」(その2) 第2章 UNIXの標準化と実装

2.1 sysconfとpathconfの定義値を出力する import os, sys for name in sorted(os.sysconf_names): try: value = os.sysconf(name) except OSError: value = "(not defined)" print name, value for name in sorted(os.pathconf_names): try: value = os.pat…

Pythonで学ぶ「詳解 UNIXプログラミング」(その1) 第1章 概論

1.1 ディレクトリ内の全てのファイルをリストする import sys, os if len(sys.argv) != 2: sys.exit("a single argument (the directory name) is required") try: filenames = os.listdir(sys.argv[1]) except OSError: sys.exit("can't open {0}".format(s…

Pythonで学ぶ「詳解 UNIXプログラミング」(その0)

お勧めのUNIXプログラミングの入門書は?と聞かれれば誰もが挙げるであろう名著 W.リチャード スティーヴンスの詳解 UNIXプログラミング(APUE)。必読書と言っても良いだろう。"Pythonで学ぶ「詳解 UNIXプログラミング」"シリーズのエントリでは、私自身の復…