トップ «前の日記(2007-03-18) 最新 次の日記(2007-03-20)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2007-03-19 :-)

_ [写経][UNIX][VMware][NetBSD][プログラミング]詳解 UNIX プログラミング写経

WindowsXP 上の VMWare 上の NetBSD

プログラム 3.2。lseek() です。ファイルを作って 10 バイト埋めて 40 バイト lseek() して 10 バイト埋めるコードです。creat() の第三引数 mode ってなんだ!? man creat しても mode について書いていない。とりあえず 0 にしてみます。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

char buf1[] = "abcdefghij";
char buf2[] = "ABCDEFGHIJ";

int main( int ac, char** av )
{
  int fd;
  if( ( fd = creat( "file.hole", 0 ) ) < 0 )
    err( EXIT_FAILURE, "creat error\n" );
  if( write( fd, buf1, 10 ) != 10 )
    err( EXIT_FAILURE, "write error\n" );
  if( lseek( fd, 40, SEEK_SET ) == -1 )
    err( EXIT_FAILURE, "lseek error\n" );
  if( write( fd, buf2, 10 ) != 10 )
    err( EXIT_FAILURE, "write error\n" );
  return 0;
}

実行。なるほど。chmod 000 ということでしょうか。

% ./a.out
% ls -l file.hole
----------  1 rin  users  50 Mar 19 16:50:17 2007 file.hole

owner も 0 なので読み書きできません。

% ./a.out
a.out: creat error
: Permission denied

sudo して rm しておきます。

% sudo rm file.hole

どうやら chmod の mode のようなので man chmod したら mode の説明がありました。S_IRWXU しておきます。

  if( ( fd = creat( "file.hole", S_IRWXU ) ) < 0 )

実行。chmod 700 ということすね。

% ./a.out
% ls -l file.hole
-rwx------  1 rin  users  50 Mar 19 16:51:31 2007 file.hole*

ファイルはこんな中身になります。真ん中 30 バイトは 0 で埋められます。

% od -c file.hole
0000000    a   b   c   d   e   f   g   h   i   j  \0  \0  \0  \0  \0  \0
0000020   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000040   \0  \0  \0  \0  \0  \0  \0  \0   A   B   C   D   E   F   G   H
0000060    I   J
0000062

_ [写経][UNIX][VMware][NetBSD][標準入力][標準出力][プログラミング]詳解 UNIX プログラミング写経

WindowsXP 上の VMWare 上の NetBSD

プログラム 3.3。標準入力から読んで標準出力へ印字します。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

#define BUFFSIZE 8192

int main( int ac, char** av )
{
  int n;
  char buf[ BUFFSIZE ];

  while( ( n = read( STDIN_FILENO, buf, BUFFSIZE ) ) > 0 )
    if( write( STDOUT_FILENO, buf, n ) != n )
      err( EXIT_FAILURE, "write error\n" );

  if( n < 0 )
    err( EXIT_FAILURE, "read error\n" );

  return 0;
}

詳解 UNIX プログラミング p.54 ではいくつか BUFFSIZE を変更して処理にかかった時間を計測しています。

このテストに用いたファイルシステムは、ブロックサイズが 8192 バイトのバークレーの fast filesystem である。これが、BUFFSIZE が 8192 の場合にシステム時間が最小である理由である。これよりバッファサイズを大きくしても効果はない。( p.55 )

ブロックサイズは df -P で確認できるようです。512 かしら。いいのかな。

% df -P
Filesystem  512-blocks     Used Available Capacity  Mounted on
/dev/wd0a      1058722    70230    935556     6%    /
/dev/wd0e      5955426  4168740   1488916    73%    /usr
/dev/wd0f     12295016  4414890   7265376    37%    /home

ブロックサイズ 1 メガで 256 メガバイトのファイルを作ってみます。

% dd if=/dev/zero of=3.3.out bs=1m count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 3.907 secs (68706285 bytes/sec)

BUFFSIZE を変更して実行してみます。

BUFFSIZE 1

% time ./a.out < 3.3.out > /dev/null
./a.out < 3.3.out > /dev/null  409.08s user 1536.40s system 99% cpu 32:26.61 total

BUFFSIZE 512

./a.out < 3.3.out > /dev/null  0.10s user 7.34s system 92% cpu 8.012 total

BUFFSIZE 8192

./a.out < 3.3.out > /dev/null  0.00s user 2.42s system 79% cpu 3.050 total

BUFFSIZE 65536

./a.out < 3.3.out > /dev/null  0.00s user 2.42s system 81% cpu 2.953 total

あれ。システムのブロックサイズが 512 ( だよね ) だけど実行結果は BUFFSIZE 8192 以降が最速ですね...。

_ 買い物

amazon

B000LE1I38

_ [Firefox] [☆] Make LinkはCopy URL+よりも使いやすい

( via HsbtDiary )

入れてみました。

右クリックのコンテキストメニューから Meta link → Configure... とすると新しく作れます。tDiary の wiki スタイルや hiki で使う書式を設定してみました。名前を hiki mode とします。こんな設定。

[[%TEXT%|%URL%]]

設定したあとに Firefox を再起動しないと設定が有効にならないみたいです。

Meta link → hiki mode をクリック

m00.png

こんなのがコピーされます。良いですね。

[[ヨタの日々|http://www.area51.gr.jp/~rin/diary/]]

_ [FF12]FF12

プレイ時間 78:48

大灯台地下層探索

  • リボンげっと
  • アーシェに装備させてみた (*´Д`)
  • 外見は変わらないけどね
  • キャロット討伐
  • 空賊の隠れ家にキャロット追加

_ [おひる][スパゲティ]おひる

きのこのカレークリームスパゲティ。

img_3395.jpg

_ [送別会][ごまや]送別会

ごまや 渋谷店

rin、師匠、N原。

なんとなく食べ過ぎて飲みすぎました。

img_3398.jpg

img_3399.jpg

img_3400.jpg

img_3401.jpg

img_3402.jpg

img_3404.jpg

img_3406.jpg

img_3407.jpg

img_3408.jpg

本日のツッコミ(全1件) [ツッコミを入れる]
_ if (2007-03-20 09:18)

df -P は blocksize とちがうんじゃないですかね?<br>disklabel(8) で見られると思います。(fsize と bsize)<br><br>permission 000 のファイルは、ディレクトリの w をもっているなら root じゃなくても rm できます。<br>(rm は文句を言うが、y で消せる。<br>あるいは chmod +w しておけば rm も文句を言わない。<br>chmod はもちろん sudo しなくても動く)