|
>>1795 rosegarden > ディレクトリに書いてあるのは大雑把に言って、ファイル名と > i ノード番号です。うーん、他にも書いてあるかも知れない。 ちょっと不正確なので、正しい説明をします。 FreeBSD な人は /usr/src/sys/ufs/ufs/{ufs_vnops.c,ufs_lookup.c,dir.h} あたりを見ると分かります。 ディレクトリは可変長レコードのデータベースみたいになっていて、 *BSD の ufs の場合一つのデータは (1) i node 番号 (4bytes) (2) レコード自体の長さ (2bytes) (3) ファイルのタイプ (1bytes) (4) ファイル名の長さ (1bytes) (5) ファイル名(ただし 4 bytes 単位で切り上げ) となっています。これは dir.h の direct 構造体で定義されています。 struct direct { u_int32_t d_ino; /* inode number of entry */ u_int16_t d_reclen; /* length of this record */ u_int8_t d_type; /* file type, see below */ u_int8_t d_namlen; /* length of string in d_name */ char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */ }; さっきの例で見ると >>1795 rosegarden 00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 というのがありますが、 84 5e 00 00 : i node 番号 0x5e84 なので 24196 0c 00 : レコードの長さ 12 バイト 04: ファイルのタイプ 04 なのでディレクトリ 01: ファイル名の長さ 1 バイト 2e 00 00 00 : 2e がファイル名 "." あとはつめもの つまり、これは % ls -ai IPv6 24196 ./ 206736 d6.c 206752 ipv6_1.html 206464 ../ 206478 daytime6.pl 206753 ipv6_2.html 206500 d200006c.html 206743 ipv6.html としたときの "." のデータです。 little endian なので例によってバイトオーダがひっくりかえります。 ファイルのタイプは /usr/src/sys/ufs/ufs/dinode.h にあって /* File types. */ #define IFMT 0170000 /* Mask of file type. */ #define IFIFO 0010000 /* Named pipe (fifo). */ #define IFCHR 0020000 /* Character device. */ #define IFDIR 0040000 /* Directory file. */ #define IFBLK 0060000 /* Block device. */ #define IFREG 0100000 /* Regular file. */ #define IFLNK 0120000 /* Symbolic link. */ #define IFSOCK 0140000 /* UNIX domain socket. */ #define IFWHT 0160000 /* Whiteout. */ となっています。これを見るとディレクトリは 0x04 です。 桁数があわないのは、パーミッションも一緒に保持させるためで、 下四桁はパーミッション用です。ファイルのパーミッションは ディレクトリではなく別のところに保持されています。 |
|
はじめあして。 この掲示板スクリプト、すばらしいです。いつも参考にしてます。 いきなりなんですけど、 2ちゃんねるみたいにレス式にするつもりないですか。 今のままだと、レスが分散してみにくいし、 それゆえ1つの話題に(2chみたいに)何百とレスつけるのは無理だし。 とゆーことで。 |
|
2ちゃんねるみたいに 「あげ」だの「さげ」だの「逝け」だの「氏ね」だのという書き込みは 見たくないです。 2ちゃんねるの何百というレスの半数は、そういった 「意味不明の書き込み」のように思えます。 そのようなレスを数多く書き込むよりも、今までのように 要点を的確に書いて頂いた方が、情報を得る側としてはありがたいです。 ここには検索機能もありますから、自分に必要な情報は 検索して探し出せば良いことですし、それで見つからなかった場合は 質問をすれば良いと考えています。 今のままでかまわないと思うのですが、常連の皆様方はどうですか? |
|
>>1797 rosegarden rosegardenさんには自明のことかもしれませんが。 ls -lで見えるサイズが、各ファイル(ディレクトリもファイル) に対応するi-node内のサイズ情報を見ているのは、 rosegardenさんの説明のとおりです。 ディスク上の割り当てが(効率の為に)ブロック単位で行われるのも rosegardenさんの言うとおりです。 普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの オフセットで決まります。 8192バイトseekして1バイト書き込むとサイズは8193バイトです。 seek部分がカラだとブロックは割り当てられません。 俗に穴のあるファイルと呼ばれます。 ディレクトリの場合、i-node内のサイズ情報は割り当てられたブロックサイズ そのものです。 理由は単に、本当のサイズ(が定義できたとしても)たいして意味がないからでしょう。 |
|
白状してしまうと、スレッド表示が欲しい、と前から思ってました。 >>1799 通行人ですが、一言。 2chのような書き込みがされることと、掲示板のユーザインターフェースは 全く別だと思います。 書き込みの内容や質は、場の雰囲気で決まるだけだと思います。 |
|
たけし怪獣記を、霊能力者から、もらいました。怖いよー。 |
|
>>1800 gixs > 普通ファイルの場合、i-node内のサイズ情報はファイルの末尾への書き込みの > オフセットで決まります。 > 8192バイトseekして1バイト書き込むとサイズは8193バイトです。 > seek部分がカラだとブロックは割り当てられません。 > 俗に穴のあるファイルと呼ばれます。 穴のあるファイルという言葉ははじめて伺いました。 実はかなり無知な方なので、こうやって教えて頂くと助かります。 参考になる書き込みどうもありがとうございました。 |
|
>>1803 rosegarden > 穴のあるファイルという言葉ははじめて伺いました。 では、ついでに。 穴あきファイルの作り方。 % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"' 穴あき部分のデータは HDD には存在しません。ですから、 % ls -s tmp で使用ブロック数を見ると、16 となっています。 しかし、穴あき部分を read(2) すると、最初から 0x00 が 入っているかのように扱われます。ですから、 % cp tmp tmp2 % ls -s tmp tmp2 16 tmp 992 tmp2 と、ファイルをコピーしただけで一気にファイルサイズが膨らみ、 file system full になってしまう可能性がありますので、注意が必要です。 |
|
>>1798 筋肉。 >>1799 通行人ですが、一言。 >>1801 gixs ここが 2ch 的な場になるのと、2ch 的システムを取り入れるのは、 gixs さんの言われる通り別問題でしょう。2ch 的システムは結構 使いやすいと思います。 で、これまでスレッドタイプは特に検討していなかったのですが、 ツリー型 http://www.so-net.ne.jp/ClubHouse/room/pc_scramble/pc_scramble.html と 非ツリー型 http://www.wakusei.ne.jp/twn/lng/green/wwwlng.cgi http://cocoa.2ch.net/unix/index2.html がありますね (とほほラウンジも 2ch も、データ構造としては 同じでしょうから、両方の形式で表示できるようにしてもいいし)。 どちらがよいですか。また、その理由があれば教えて下さい。 ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを 立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか 書かなくて済むし ;-) でも、情報が混ざって探しづらいということならば検討はしてみます。 # それを補うつもりで >>数字 形式のリンクを導入してみました。 # 将来的にはその情報からツリー形式を抽出できないかな、と。 あと、できればご自分が使いにくいと思う理由を分析していただ けるととってもありがたいです (それが一番難しいんですけれども)。 使いやすい掲示板というのは永遠の課題ですので、今回のような 大規模な改変や、こまかなユーザインタフェースまわりまで、提案 していただけるのはありがたいことです。 しかし、最近これまでにも増して忙しくなってしまったので、 あまり期待はしないで下さいね。 |
|
>>1804 68user >穴あきファイルの作り方。 > % perl -e 'open(OUT,">tmp");seek(OUT,1000000,0);print OUT "a"' ああ、わかりました。lseek はファイルサイズを越えても seek できるという性質を使っているんですね。 古い UNIX のシステムコールの本で見たことあるのですが、 その時には何が何だかさっぱり分かりませんでした。 man lseek しても出てますね。 >The lseek() function allows the file offset to be set beyond the end of >the existing end-of-file of the file. If data is later written at this >point, subsequent reads of the data in the gap return bytes of zeros (un- >til data is actually written into the gap). 色々とありがとうございます。勉強になります。 >>1805 68user >ちなみに、なぜ現在のようなウナギの寝床式掲示板にしたかと >いうと、管理者が楽だからです。「新しい話題だから新しいスレッドを >立てろ」だの「クソスレ立てんなゴルア」とか「1の主治医です」とか >書かなくて済むし ;-) これは確かにそうですね。スレッド式にしても書き込む方が神経を 使わないとスレッドの意味が無くなるでしょうし。 個人的にはどちらでも構わないのですが、スレッド式にしたときに 68user さんがどんなスクリプトを書かれるのかは興味のあるところです。 |
|
ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん 右端によってって、めちゃ見にくいと思う。 とほほラウンジは、スレ見る度にいちいちマウスうごかすのがめんどう。 ということで、2chは、やはりすばらしいと思う。 |