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.pathconf(".", name) except OSError: value = "(not defined)" print name, value
プラットフォームで定義されている制限値の名称は、os.sysconf_names
とos.pathconf_name
に定義されている。
ちなみに、os.sysconf_names
とos.pathconf_names
は辞書オブジェクトだが、
sorted(os.pathconf_names)
でソートした辞書のキーの一覧を取得することができる。sorted()
は指定したオブジェクトのイテレータを取得してからソートするので、上の式は
sorted(iter(os.pathconf_names))
と同じだ。辞書オブジェクトのイテレータは辞書のキーのみを返すので、結果として
sorted(os.pathconf_names.keys())
と書いたのと同じ結果が得られる。
2.2 パス名用領域の動的割り当て
import os, sys PATHMAX_GUESS = 1024 _pathmax = None def getmaxpath(): global _pathmax if _pathmax is None: # first time through try: _pathmax = os.pathconf("/", "PC_PATH_MAX") if _pathmax == -1: _pathmax = PATHMAX_GUESS else: _pathmax += 1 except Exception: sys.exit("pathconf error for _PC_PATH_MAX") return _pathmax
手元の環境では、os.pathconf("/", "PC_PATH_MAX")
は4096を返す。ってことは_pathmax += 1
って不要なんじゃないだろうか。
2.3 ファイル記述子の個数の決定
import os, sys OPENMAX_GUESS = 256 _openmax = None def getmaxopen(): global _openmax if _openmax is None: # first time through try: _openmax = os.sysconf("SC_OPEN_MAX") except Exception: sys.exit("sysconf error for SC_OPEN_MAX") if _openmax == -1: _openmax = OPENMAX_GUESS else: _openmax += 1 return _openmax
手元の環境では、getmaxopen()
は1025
となった。