UNIXプログラミング質問すれ Part2

このエントリーをはてなブックマークに追加
952まだRH9:04/05/23 15:30
Mac の CD-ROM の partition map の件ですが、Mac の人は CD burner を使うだけで
こと足りるので、聞いても分かる人がないようなので、ぐぐってみたら、unix 関係で
プログラムで引っかかるので、聞きに来ました。
(Inside Macintosh の SCSI Manager, Start Manager はありきたりの記述)
Mac の CD-ROM の先頭には、いわば device 用の諸元が入りますが、そのひとつに
全体容量をブロックサイズ(あるいはセクタサイズ)で割った数が入るところが
あります。で、この数がゼロのものと、丁寧に計算しているものがあります。
2−3の例から、読みこみ時には最早参照されていない感じがしますが、実情はどうか
ご存知の方はいらっしゃいませんか。
(2,3の Mac の CD-ROM も見ましたが、いろいろで、気持ちが悪いのです)
>>952
> Mac の CD-ROM の先頭には、

というのは一体?
954まだRH9:04/05/24 01:05
>>953
どうも。
構造体名:Block0 は次ぎのように始まっています。
"ER"の signature
unsigned short sbBlkSize  // 512 or 2048 (bytes) がよくある
unsigned long sbBlkCount // これが問題の Blk 数
....
driver 数
driver 開始 Blk で始まる8バイトのデータが繰り返される。
....
次ぎの Blk といっても、sbBlkSize=2048 でも 512 bytes 後ですが、
partition map が(512 bytes 毎に)続きます。
....
driver routine ...
955デフォルトの名無しさん:04/05/24 14:11
unixを使ったcプログラミングで、

if( fork() == 0){
/* 子プロセス */
execlp("ls", "ls", "-lag", NULL);
}

/* 親プロセス */
printf("done\n");
exit(0);

unixでこういうプログラムを実行したら、
doneが表示されて
lsの実行結果が表示されて
そのあと見えないプロンプト(?)が存在するようになるんですけど
これはどういうことなんですか?
>>955
見えないプロンプトの存在をどうやって知ったのだ!?

おいといて。
シェルに戻ってプロンプトが表示された後で
ls が実行されてるんでそ。
こんな感じですか?

pid_t ret;
if ((ret = fork()) == 0) {
execlp("ping", "ping", "-c", "3", "localhost", NULL);
} else if (ret > 0) {
wait(NULL);
printf("done\n");
} else {
perror("fork");
exit(1);
}
>>954
最近はtapeみたいにon the flyで書き込んでいくから、
正直分かりませんってとこなんじゃないの?
CD-ROMは辿っていけば分かるしね。
959まだRH9:04/05/24 23:26
>>958
レスをありがとうございます。
Apple_Free は、見ないってのは、あったのですが、
Apple_HFS もブロック数はどうでもよくなっている見たいで、
やはり、そういう流れでしょうか。
UNIX のソースにも、/* XXX */ ってコメントが付いている。
coreってどうやってデバックすればいいの?
$ gdb a.out core
962デフォルトの名無しさん:04/05/26 09:18
>>961
いやそれは分かるんだけど、そのあとどうすればよいのか分からない。
(gdb) where
Debugging with GDB
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_toc.html

backtraceして止まった辺りを調べるとか。
実例入力
(gdb) bt
(gdb) f
(gdb) list
(gdb) print var
(gdb) printf "%08x",var
(gdb) up
(gdb) list
(gdb) list 20
(gdb) down
>>965
それだとupの時点でlistの効力が切れるから次ターンでcontの反撃を食うことになるぞ。
GUIフロントエンド使えって
俺はemacsで使う
>>968
readline使えなくて地獄じゃないですか?
使えるよ。
でもちょっと変数を見たいだけなら fprintf が手っ取り早いんだな。
Emacsのフロントエンドって時々おかしくなるので困る。
コマンドラインのgdbで実行すると正しく動くのに、
Emacs上のgdbフロントエンドからだとステップ実行の行がおかしかったり
落ちてしまったりするんだよな。なぜだろう。

DDDは日本語を含むファイルで位置の計算が合わないし、どこかにフロントエンドはないものか。
973デフォルトの名無しさん:04/05/28 15:30
OutputDebugStringみたいなのってないですか?
syslogじゃなくて。
>>973
どーゆー機能が欲しいかも書かず
「みたいなの」じゃ判らん。
fprintf(stderr, 〜 じゃ駄目なのか?
975デフォルトの名無しさん:04/05/28 16:21
linuxで書いたネットワーク関係のライブラリを
カーネルモジュールにして欲しい、って言われますた。
仮想ネットワークドライバにしようと思うんだけど、移植って簡単にできるの?
mallocとかしてるとこを全部kmallocに書き換えないといけないくらい?
あとlibsslとかの普通のアプリケーション用ライブラリってカーネルモジュールに使えるの?
976デフォルトの名無しさん:04/05/28 16:30
>> 975
一般的にカーネルモードで動作するロジック中で、
システムコールやライブラリ関数を使う事は出来ません。
つまり、マニュアルセクションの2と3は使えないってこと。
使用可能な関数は、セクション9になります。

また、ユーザーランドのプログラミングとカーネル内部の
プログラミングでは、プログラミングを行うときの考え方や
気をつけないと行けない事、その他もろもろ、など全く異なる
概念でもってプログラムを作成しなければいけません。

よって、移植というレベルではありません。
2.6で激しく変わったんじゃなかったかなあ>NW周り
978975:04/05/28 16:45
>>976
ってことはかなり書き換えですか・・・。

tron用にも書いて欲しい、とか言われたので
カーネルモジュールにしようと思ったんですが、
とりあえずtun/tapを使う方向で考え直してみます。
ありがとうございます。

>>977
2.4をターゲットにするんでそこは大丈夫そうです。
ソケット通信時にrecvfromでデータを受信してるんですけど確実に第3引数で指定した
サイズを受信するまで待つようにするにはどうすればいいでしょうか
>>979
そんな機能はない。
ループ組んでバッファへのポインタずらしてやれば。
981デフォルトの名無しさん:04/05/29 23:32
locale 調べるのって LANG 見ればいいの?それとも LC_ALL?
982デフォルトの名無しさん:04/05/29 23:42
>>981
両方
>>981
優先順位は
LC_ALL > 他のLC_* > LANG
984981:04/05/29 23:49
>>982
どうもありがとう。
985981:04/05/29 23:50
>>983
ありがとう、よくわかりました。
986デフォルトの名無しさん:04/05/30 00:39
>>979
recvfrom ってことはUDPだよね。
UDPてことはsend もしくは、sendtoで送った1つのパケットが
そのまま受け取れるんじゃないの?
recvfromで指定するサイズって送信側とネゴしておいた値を
使うものじゃないの?
だから、なんでrecvfromで指定したサイズが受け取れないという
ケースがあるの?

TCPと勘違いしてない?
>>986
recvfromするサイズがsendtoで投げたサイズより小さい場合とかはどうなるんですか?
>>986
>UDPてことはsend もしくは、sendtoで送った1つのパケットが
途中でフラグメント化したりしないんですか?後、IPパケットが複数になってどっちかが遅延したりとか。
989デフォルトの名無しさん:04/05/30 01:57
OS起動時に呼び出されるrcスクリプトに関して質問です。
このrcスクリプトから呼ばれる各種アプリケーションの起動スクリプト内で、
コマンドを実行するときに'&'を付けてバックグラウンド実行されている
ものを見たことがないです。'&'を付けないで実行する理由は何でしょうか?
なんかわけわからん質問かも知れませんが、わかる方いたら教えてください。
>>989
シェルスクリプト終了時にコマンドがすべて完了している事が保証されなくなるから。

とか。

例えるなら、

「納期は今日だ!しかしテストは現在進行中だ!
まぁ、客もすぐここの試験をやるなんて言わんだろう・・・多分・・・。
よし!なんとかなる!客には終わったって言うぞ!!」

なんて言うアグレッシブな状況になると、思いました。

非同期処理で必ずつきまとうタイミングの問題をわざわざ持ち込む必要もなければメリットもない
と言うことかなと(結局の所変な待ちが無ければ処理時間は大して変わらんので。)。




>>988
何のためのマルチレイヤだ?
それらは,IP層で全て吸収される。

>>987
尻切れで後ろは切り捨て。これが基本。
実装次第では,オプション等でどうにかできる可能性もあるが,
そんなもんに期待してはいけない。
992デフォルトの名無しさん:04/05/30 14:16
>>990
ありがとうございます。自分は入社2年目ですが、1年目のときに
知らなかったせいでそれをやらかしてしまったのです。
HP-UXでrcスクリプトが先に終了するとSIGHUPが飛んできて、バックグラウンド
実行中のプロセスが消えました。しかし不思議なことにSolaris、AIX、Linuxでは
発生しないのです。そのあたりはOSの仕様だと勝手に自分を納得させていますが、
nohupというコマンドで最終的に切り抜けたことに不安があります。
993デフォルトの名無しさん:04/05/30 16:11
>>987
>>988

>>991 の言うとおり。
フラグメントかされたパケットは、きちんと元通りにされてアプリに
渡されます。

TCPでデータをsendしたときに、sendしたサイズ分が1回のrecvで受け取れるわけ
ではないというのと混同してないか?
>>992
私も二年目です。

HP-UXベースのリアルタイムOSを使ってます。
おもしろそうだから実験してみよっと。
995デフォルトの名無しさん:04/05/30 23:22
alarm()等から送られるシグナルを受け取るハンドラは、送ったスレッドと同じスレッドで実行されるのでしょうか?
つーかいいかげん、そろそろ次スレ立てろや、次の奴↓
↑ちょっと待っていろ。
998デフォルトの名無しさん:04/05/31 00:42
999デフォルトの名無しさん:04/05/31 00:56
【ビギナ】初心者が習うべき言語は? part4【必読】
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。