日時 | 2010/03/06 14:00 - 16:00 |
場所 | 都内某所 |
挑戦者 | id:marqs id:daisukebe id:shiumachi |
メモすらとってないので議事録というレベルではないです。思い出しながらのメモ書き。
題材
- 作者: Bruce Molay,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2008/04/21
- メディア: 大型本
- 購入: 9人 クリック: 280回
- この商品を含むブログ (47件) を見る
今回の範囲
- 2章
流れ
とりあえず id:daisukebe の作った who を眺める
- python用utmpへのアクセスモジュールpyutmpというものがあったそうだが、MacOSX10.5以降には非対応らしい
who と w の違いって何よ?(研究課題2.1)
- id:shiumachi が strace を流すように促すが、MacOSXには入っていない(bsd系)
- id:shiumachi の Fedora12 で確認したところ、w は /proc/
/cmdline を全てとってきている模様
研究課題2.5 write によるディスクへの書き込みについて
研究課題2.6 同一ファイルの複数回オープン
- 問題
- あるファイルFに対し、ファイルディスクリプタを3つ(fd1,fd2,fd3)を使ってそれぞれ O_RDONLY,O_WRONLY,O_RDONLY で開く。
- それぞれ「読む」「書く」「読む」を実行する。
- 予想
- 最後のreadはその前のwriteに影響されないんじゃね?
- 結果
- そんなことはなかった。普通に直前のwriteで書き込まれる。テストコードと結果は末尾に記載。
- 今回初めて知ったこと
% echo > testfile
- これで空ファイル作れるんだ。知らなかった。自分の操作を人に見せると、思いもよらないことを教えてもらえることがある
最後のパズル:tail
- tail -fってどうやってるんだ?
- またstraceで覗いてみる。
- 何かのファイルをread待ちしているように見える
inotify_init() = 4
inotify_add_watch(4, "testfile", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
fstat64(3, {st_mode=S_IFREG|0644, st_size=1, ...}) = 0
read(4,
- inotify を使ってイベントを監視していることがわかる
- tail -f中にファイルが減るとどうなるのか?
- "tail:
: ファイルが切り詰められました"と表示される
- "tail:
次回予告
- 2009/03/20 10:00 -
- 3章
2.5のテストコードとその結果
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #define BUFSIZE 512 int main(int argc,char **argv){ int fd,fd1,fd2,fdw; char buf[BUFSIZE]; char initdata[] = "hello hello"; char testdata[] = "test"; if(argc != 2){ exit(1); } if((fd = open(argv[1], O_WRONLY)) == -1){ exit(1); } write(fd,initdata,sizeof(initdata)); if(close(fd) == -1){ exit(1); } if((fd1 = open(argv[1], O_RDONLY)) == -1){ exit(1); } if((fdw = open(argv[1], O_WRONLY)) == -1){ exit(1); } if((fd2 = open(argv[1], O_RDONLY)) == -1){ exit(1); } read(fd1,buf,20); printf("%s\n",buf); write(fdw,testdata,sizeof(testdata)); read(fd2,buf,20); printf("%s\n",buf); return 0; }
- 結果は以下の通り。
% ./fileread testfile
hello hello
test
% od -c testfile
0000000 t e s t \0 h e l l o \0 \0
0000015