rabbitfoot530's diary

読んだ本と、プログラムに関することのメモです。好きな言語は、C++, Python, Golang, TypeScript。数学・物理・学習理論も好きです。

PythonによるLinuxプログラミングインタフェース(5章 pread)

第5章のP105のpreadのサンプル。

#/usr/bin/env
#-*- encoding: utf-8 -*-
import os


def pythonic():
    file = open(__file__, encoding='utf-8')
    orig = file.tell()
    print("before offset: {0}".format(file.tell()))
    offset = 10
    file.seek(offset)
    lines = file.readlines()
    print(lines)
    file.seek(orig)
    print("after offset: {0}".format(file.tell()))
    file.close()

def pythonic2():
    file = open(__file__, encoding='utf-8')
    print("before offset: {0}".format(file.tell()))
    buffer_size = 100
    offset = 10
    s = os2.pread(file.fileno(), buffer_size, offset)
    print(s)
    print("after offset: {0}".format(file.tell()))
    file.close()

if __name__ == '__main__':
    pythonic()
    pythonic2()

 pythonicメソッドが、preadの内容をseekを使って書いたもの。自分でseekしなくても、preadがやってくれるので、preadの操作をしたいときは、os.preadを使ったほうがいい。 pread使えばreadした後、seekでreadした分戻らなくても、自動でread前の位置に戻ってる。