|
>あ、 >Solaris はシングルユーザモードで起動する時でも >パスワードを聞いて来ることを思い出しました。 >やっぱりインストール CD から起動して、ファイルシステムを >マウントして書き換えるより無いですね ありがとうございます。 ところでもう一つ質問があります。 directoryでls −alすると6行目に各ファイルやdirectoryの容量が表示されますが、そこによく512という数字が出てきます。そのdirectory下のファイルの容量が512以上なので512は容量ではないのかなと思ったのですが、なにか特別な意味があるのでしょうか? よろしくお願いします。 |
|
>>1794 ミング > そのdirectory下のファイルの容量が512以上な > ので512は容量ではないのかなと思ったのですが、 ディレクトリもファイルですから、ディレクトリ自体のサイズです。 ディレクトリに書いてあるのは大雑把に言って、ファイル名と i ノード番号です。うーん、他にも書いてあるかも知れない。 要するにファイルのリストです。最初はだいたい 512 バイトで ファイルが沢山になった場合には適当に 512 バイト単位で大きくなって 行きます。手元の FreeBSD だとエディタでディレクトリを見ることも できて、次のような感じです。 % ls IPv6 d200006c.html daytime6.pl ipv6_1.html d6.c ipv6.html ipv6_2.html % cat IPv6 | hexdump -C 00000000 84 5e 00 00 0c 00 04 01 2e 00 00 00 80 26 03 00 |.^...........&..| 00000010 0c 00 04 02 2e 2e 00 00 97 27 03 00 14 00 08 09 |.........'......| 00000020 69 70 76 36 2e 68 74 6d 6c 00 1e c0 a0 27 03 00 |ipv6.html....'..| 00000030 14 00 08 0b 69 70 76 36 5f 31 2e 68 74 6d 6c 00 |....ipv6_1.html.| 00000040 a1 27 03 00 14 00 08 0b 69 70 76 36 5f 32 2e 68 |。'......ipv6_2.h|、&......|そのディレクトリにあるファイルの名前だけ保持できれば いいので、ファイルの数が少なければ、512 バイトということが ありえます。 |
|
>>1795 rosegarden hexdump のところが表示が変になってしまいましたね。 ソースの方を見てもらえれば分かりやすいかも。 |
|
>>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は、やはりすばらしいと思う。 |
|
>>1770 68user http://yamama.51.net/cgi-bin/minibbs.cgi?log=395 うひひひ。 えっと、自動リンクのところを、 こんな感じにしてみた。$strは、もうURLエンコードされてるっていうことで。 &以外は、はっちゃいけないんだから、、、。 $str =~ s#(s?https?://(?:[\-_.!~*'()a-z0-9;/?:\@=+\$,%\#]|&)+)#<a href="$1">$1</a>#ig; |
|
Xlibでの質問です。 日本語文字列をウィンドウの左上(x:0,y:0)に表示するのを書いています。 ソースコードはこれです。 http://homepage1.nifty.com/tyuuki/tmp/Makefile http://homepage1.nifty.com/tyuuki/tmp/drawstr.c 実行結果は(うちのtwmだと)このようになります。 http://homepage1.nifty.com/tyuuki/tmp/drawstr.jpeg なぜか上の方に隠れてしまいます。 本当は、 http://homepage1.nifty.com/tyuuki/tmp/drawstr2.jpeg のようになってほしいんです。 # これは、多分タイトルバー(?)の長さを求めてやればいいんでしょうけど…。 XCopyAreaで0, 0を指定してるのにこうなってしまうのは、どうしてなんでしょうか? 教えてください。 |
|
>>1807 ひろし。 > ツリー式だと、レスのレスのレスの・・・ってやってくとどんどん > 右端によってって、めちゃ見にくいと思う。 それは同感ですね。あと、現 SEGA BBS のような、ツリーを一括して 表示するのは最悪だと思います。とにかく見にくい。 >>1808 やまま > こんな感じにしてみた。 どうもです。参考になります。 >>1809 Yuuki > なぜか上の方に隠れてしまいます。 XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の 座標を与えます。本当はもうちょっと複雑で、原点に 10,10 を与えた としても、フォントの lbearing, descent の値によっては、9,10 や 10,11 にドットが描画される可能性はあります。そこらへんの情報は XmbTextExtents で取得できます。 |
|
このサイトのUNIXシステムコールのopendirの説明にあったサンプルコードを打ち込んでみたのですが、 ファイル名の頭2文字が欠けてしまいます。dir->d_nameに-2すればファイル名の頭を指してくれるのですが 何故なんでしょう。OSは SunOS 5.5.1です。sys/dir.hを見てもちゃんとファイル名エントリがd_nameで定義されているのに。何か障害になるものがあるのでしたらお教え下さい。 |
|
>>1811 Donchan SunOS上でファイル名2文字切り落としが発生するということであれば、 おそらく使用されているコンパイラに問題があるものと思われます。 以下のアナウンスが参考になるのではないでしょうか。 http://www.sun.co.jp/tech/faq/solaris2_ja/Q6.19.html 以上、通りすがりの者でした。 |
|
>>1810 68user > XDrawString/XmbDrawString に与える原点 x,y は、文字列の左下の > 座標を与えます。 今まで左上にだと思いこんでました…。 > そこらへんの情報はXmbTextExtents で取得できます。 これで解決しました。 http://homepage1.nifty.com/tyuuki/tmp/drawstr.c このようになりました。 ありがとうございます。 |
|
>>1813 Yuuki > これで解決しました。 > http://homepage1.nifty.com/tyuuki/tmp/drawstr.c http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。 誠に勝手ながら、後から見た人のために drawstr2.c を貼っておきます。 行数短縮のため、少々コードスタイルをいじらせていただきました。 もしまずければ削除いたします。 ---- #include <stdio.h> #include <locale.h> #include <X11/Xlib.h> #include <X11/Xutil.h> static XFontSet load_font( Display *display, const char *font_names ){ char **miss_str; int miss_cnt; char *def_str; return XCreateFontSet( display, font_names, &miss_str, &miss_cnt, &def_str ); } static int ask_text_height( XFontSet font, const char *str ){ XRectangle rect; XmbTextExtents( font, str, strlen( str ), &rect, NULL ); return rect.height; } int main( int argc, char **argv ){ Display *display; Window window; GC gc, gc_clr; unsigned long background, foreground; XFontSet font; Pixmap pixmap; const int width = 640; const int height = 480; const char *message = "こんにちは。"; if ( setlocale( LC_CTYPE, "" ) == NULL ){ printf( "setlocale error\n" ); exit( 0 ); } display = XOpenDisplay( NULL ); font = load_font( display, "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*" ); background = WhitePixel( display, 0 ); foreground = BlackPixel( display, 0 ); window = XCreateSimpleWindow( display, DefaultRootWindow( display ), 0, 0, width, height, 0, 0, background ); pixmap = XCreatePixmap( display, window, width, height, DefaultDepth( display, 0 ) ); gc = XCreateGC( display, window, 0, 0 ); XSetBackground( display, gc, background ); XSetForeground( display, gc, foreground ); gc_clr = XCreateGC( display, window, 0, 0 ); XSetBackground( display, gc_clr, background ); XSetForeground( display, gc_clr, background ); XMapRaised( display, window ); XSelectInput( display, window, ExposureMask ); while ( 1 ){ XEvent event; XNextEvent( display, &event ); switch ( event.type ){ case Expose : XFillRectangle( display, pixmap, gc_clr, 0, 0, width, height ); XmbDrawString( display, pixmap, font, gc, 0, ask_text_height( font, message ), message, strlen( message ) ); XCopyArea( display, pixmap, window, gc, 0, 0, width, height, 0, 0 ); break; } } } |
|
>>1814 68user > http://homepage1.nifty.com/tyuuki/tmp/drawstr2.c ですよね。 すいません。 間違えていました…。 > もしまずければ削除いたします。 全然まずくないです。 今までのファイルをまとめておきました。 http://homepage1.nifty.com/tyuuki/archive/drawstr.tar.gz |
|
FreeBSD4.2R をインストールしたのですが、サウンドの設定がよくわからずつ まずいてしまいました。いろいろHPや書籍を調べて以下のような処理を行いま したが、以前としてサウンドが鳴りません。設定で間違っている箇所が あれば指摘して頂きたいです。ちなみに、サウンドカードはYamahaのYMF740です。 1. カーネルの再構築 # cd /usr/src/sys/i386/conf/ # cp GENERIC MY_KERNEL # vi MY_KERNEL ------------------------- 以下の内容を追加 # For PnP/PCI sound cards device pcm ------------------------- # config MY_KERNEL # cd ../../compile/MY_KERNEL # make depend # make install 2. デバイスファイルの作成 # cd /dev # ./MAKEDEV snd0 以下は関係ありそうなエラーログです。 > dmesg | grep pcm pcm0: <Yamaha DS-1 (YMF740?)> irq 9 at device 10.0 on pci0 pcm0: unable to map register space device_probe_and_attach: pcm0 attach returned 6 > cat /dev/sndstat cat: /dev/sndstat: Device not configured |
|
>>1816 taka > FreeBSD4.2R をインストールしたのですが、サウンドの設定が > よくわからずつまずいてしまいました。 えっと、サウンド・PnP まわりはいまだに何がなにやらわかりません。 うちでは device pcm を追加し、OS ブート時に boot -cv でコンフィグ モードにして > pnp 1 0 bios enable irq0 5 drq0 1 port0 0x220 port1 0x0 port2 0x388 と設定しました。 なんで IRQ が 5 なのか、なんで PnP なのに手動で設定しないと いけないのかさっぱりわかりません。pnpinfo(8) の出力も全く理解 できないし…。 僕は、IRQ って ISA のみにしかない概念? PCI のサウンドカードって あるの? …てな知識レベルなので、FreeBSD-users-jp などで質問された 方が早いかもしれません。 どこかにわかりやすい解説はないかなぁ。 |
|
>>1816 taka 私の場合次のようになっています。もっとも 4.3-BETA ですが、 要領は同じだと思います。 # For non-pnp sound cards with no bridge drivers only: device pcm0 at isa? irq 10 drq 1 flags 0x0 # # For PnP/PCI sound cards device pcm # The bridge drivers for sound cards. These can be seperately configured # for providing services to the likes of new-midi (not in the tree yet). # When used with 'device pcm' they also provide pcm sound services. # # sbc: Creative SoundBlaster ISA PnP/non-PnP # Supports ESS and Avance ISA chips as well. # gusc: Gravis UltraSound ISA PnP/non-PnP # csa: Crystal Semiconductor CS461x/428x PCI # For non-PnP cards: device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15 #device gusc0 at isa? port 0x220 irq 5 drq 1 flags 0x13 sbc ドライバか gusc ドライバのいずれかを有効にしてみてください。 このへんは試行錯誤がいるかもしれません。 LINT から関係する部分を copy&paste してきて 自分に関係ない部分をコメントアウトすると面倒ないです。 |
|
>>1812 通行人 パスの先頭に/opt/SUNWspro/bin/を追加することで正常に動作しました。互換性の問題だったのね……。 |
|
いきなりの質問でごめんなさい。 こちらの掲示板にはかなり詳しい方がいらっしゃるようなので、 教えて頂きたいのです。 今、UNIX上で動くクライアントサーバをC言語で作っています。 (ほとんど経験がないので、勉強しながらという感じです。) ちょうど、こちらに参考になるサンプルがあったので、それを元に 作っているところです。 自分の環境で、クライアントとサーバ間のソケット通信をすることが できることを確認したところです。 ここからが良くわからないところなのですが、 クライアントが複数あって、それぞれが別の処理を行う時、 サーバ側としては、そのクライアントをどう区別したら良いのでしょうか? selectを使って、任意のソケットに対して任意のデータを送信することは わかるのですが、では、任意のクライアントプロセスを区別するのは どうすれば良いのかが、いまひとつ、ぴんとこないのです。 たとえば、サーバ側の処理として、 クライアントA:サーバに「aaa」→「AAA」と変換してecho。 クライアントB:サーバに「bbb」→「BBBBB」と変換してecho。 クライアントC:サーバに「ccc」→「C」と変換してecho。 というのがあるとします。 各クライアントが順不同のタイミングで接続してきた場合、 どのクライアントがどのソケットに接続しているのかを知るのには、 どのような方法があるのでしょうか? ついでですが、クライアントは、おなじ内容のものが複数接続してくる 場合もあります。(AとA'とA''、みたいに。) つまり、ソケットディスクリプタのID(と言って良いのでしょうか? よく、 sd[0]とかsd[i]とかと書かれているものです。)と クライアントをどうリンクさせれば良いのかがわからない、んです。 C言語で処理するレベルでの話だろうとは思うのですが、 具体的なサンプルがなくて、方法を理解することもできず、困っています。 どうぞ、知恵をお貸しください。 いきなり現れて勝手なお願いをしていますが、よろしくお願いします。 |
|
>>1820 みみ > 各クライアントが順不同のタイミングで接続してきた場合、 > どのクライアントがどのソケットに接続しているのかを知るのには、 > どのような方法があるのでしょうか? http://X68000.startshop.co.jp/~68user/net/c-echo-2.html を見てください。 getpeername(sock, (struct sockaddr *)&peer_sin, &len) でソケットの接続先のアドレス (IP アドレス+ポート番号の 情報) が peer_sin に格納されます。 - IP アドレス … inet_ntoa(peer_sin.sin_addr) - ホスト名 … gethostbyaddr - ポート番号 … ntohs(peer_sin.sin_port) でそれぞれ取得できます。 そのページのサンプルの echo-server-select.c では、 accept したときに struct CLIENT_INFO という構造体に ホスト名・IP アドレス・ポート番号を格納し、その後 クライアントの情報が必要になったら struct CLIENT_INFO を 参照していますが、毎回ソケットに対して getpeername しても動作はします。 |
|
素早い解答、ありがとうございます。 確認の意味で、質問をさせて頂きます。 そうすると、サーバ側の処理としては、下記のように なるということでしょうか? ・クライアントからの接続がある。 (sd[i]がインクリメントされる。) ・接続してきたクライアントからの処理要求がある。 (ここで、クライアント側のプロセスが何なのかが判明する。) ・getpeername を行うことで、sd[i]の”i”の値を得る。 (これにより、接続元クライアントのプロセスとを リンクさせることができる。) 上記のような解釈で、誤りがありませんでしょうか? getpeername については、もう少し勉強をしてみます。 (実は、サンプルプログラムで良く理解できていなかった部分です。 クライアント情報を格納しているのは判ったのですが。 付け焼き刃のかなしさです。でも頑張ります。) 本当に、ありがとうございます。 後程、結果を報告に来ます。 |