ふつうのLinuxプログラミングを読む1

ファイルディスクリプタ

  • ファイルディスクリプタによってファイルの状態を監視するコードを書けや、みたいな指令が降ってきたのだが、あまりにも低レイヤーについて知らなすぎるので、

ふつうのlinuxプログラミングを読んで勉強することにする。

Pythonで書くことを目的としているので、Cのコードも写経してみるけど、どっちかっていうとPythonの文字列処理とか書かないでos.readとかでなるたけやってみる。

  • 大学でこういう授業あったけど、大学が苦手だったのでスルーしていた。今では反省している。

③章

mountコマンド
[vagrant@rikka] $(0)mount                   [~/.../ordinary_linux_programming:]
/dev/mapper/quantal64-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
/dev/sda1 on /boot type ext2 (rw)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)
/vagrant on /vagrant type vboxsf (uid=1000,gid=1000,rw)
192.168.33.1:/Users/fjwr38/vm_share on /home/vagrant/vm_share type nfs (rw,vers=3,udp,addr=192.168.33.1)

ストリーム

  • プロセスがファイルにアクセスするときに、ストリームを通してファイルの中身を取得する(readしたりwriteしたり)
  • バイト列が出たり入ったりするもの
  • プロセス間のやりとりやプロセスがファイルシステムにアクセススルときはストリームを介して操作をする

④章

  • 飛ばす

⑤章

ファイルディスクリプタ

  • プログラムからストリーム(ファイルを操作する)を扱うためのもの。

  • standard input, standard output, standard error output

ちなみにファイルディスクリプタは以下みたいな感じにPythonから操作する。iPythonの出力結果。

http://www.tutorialspoint.com/python/os_fdopen.htm

In [1]: import os, sys

#ファイルをreadとwriteで開く
In [2]: fd = os.open("foo.txt", os.O_RDWR| os.O_CREAT)

In [4]: fo = os.fdopen(fd, 'w+')

#ファイルに任意の文字を書き込む
In [6]: msg = "Python is a great language\n Yeah its great!!\n"                 
In [7]: fo.write(msg)
#いったんcloseして書き込む
In [7]: fo.close()

#ファイルのスタート位置を一番左にする
In [24]: os.lseek(fd, 0, 0)
Out[24]: 0

In [25]: os.read(fd, 20)
Out[25]: 'Python is a great la'