rabbitfoot530's diary

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

PythonによるLinuxプログラミングインタフェース(4章 read, write, lseek)

 4章のP90ページのread, write, lseekのプログラム。

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


def pythonic():
    try:
        file = open(sys.argv[1], 'r+', encoding='utf-8')
    except IOError as e:
        print("err: " + e)
    else:
        try:
            ap = 2
            argc = len(sys.argv)
            while ap < argc:
                opt = sys.argv[ap][0]
                if opt in {'r', 'R'}:
                    length = int(sys.argv[ap][1:])
                    data = file.read(length)
                    i = 0

                    while i < length:
                        if opt == 'r':
                            print("{0}".format(data[i]))
                        elif opt == 'R':
                            print("{0}".format(str(ord(data[i]))))
                        i += 1

                elif opt == 'w':
                    print(sys.argv[ap][1:])
                    print(sys.argv[1])
                    file.write(sys.argv[ap][1:])
                elif opt == 's':
                    offset = int(sys.argv[ap][1:])
                    try:
                        file.seek(offset)
                    except Exception as e:
                        print(e)
                    else:
                        print("{0}: seek succeeded".format(offset))
                else:
                    pass
                ap += 1
        finally:
            file.close()

# touch tfile
# ./p90_seek_io.py tfile s100000 wabc
# ./p90_seek_io.py tfile s10000 R5
if __name__ == '__main__':
    pythonic()

 引数により、ファイルを作成したり、読み込んだりする。

  • ファイルホールの部分は、0が表示される。
  • ordにより文字列のバイトを表示する部分。