PythonによるLinuxプログラミングインタフェース(5章 dup)
#/usr/bin/env #-*- encoding: utf-8 -*- import os def pythonic(): def run(): py_dup() py_dup2() def py_dup(): newfd = os.dup(1) print("newfd: " + str(newfd)) os.close(2) newfd = os.dup(1) print("newfd: " + str(newfd)) def py_dup2(): file = open(__file__) fd = file.fileno() newfd = 1000 os.dup2(fd, newfd) print(fd) print(newfd) str = os.read(newfd, 100) print(str) return run if __name__ == '__main__': pythonic()() #run = pythonic() #run()
os.dupにて、引数に与えたファイルディスクリプタをコピーする。 今回は書き込みのfdの1をコピー。 この時点でnewfdは、1のコピーとなる。
そして、os.dup2にてfdにopenしたファイルのファイルディスクリプタを与えて、newfdに適当な1000を入れておいて、os.dup2にてfdをnewfdにコピーすると、newfdはfdを指しているので、newfdをreadすると当然、fdでopenしたファイルの内容が表示される。