test
前スレ
>>992 で,お前は一体,何を言いたいんだ。
一人,自己完結して終い?
しかし
>>992 はtrapくらい検討するべきだったろう
トラブってもマニュアル読まない人?
8 :
デフォルトの名無しさん :04/05/31 09:07
>>5 初めの実装ではスクリプトの中で'&'付けてコマンドを実行するようにしていました。
OS起動によりスクリプトを起動したら、ログイン後に実行し続けている
はずのコマンドのプロセスがなくなっていました。そこでなぜかと
調べているときに、他のアプリケーションのスクリプトでは'&'を付けて
起動しているコマンドがほとんどないことに気が付きました。
根本的な知識がなかったために質問させてもらいました。
>>7 自分ひとりで検討したわけではないのですが、何かまずい欠点などあったら
指摘してもらえますか?
マニュアルを読んでない。
>>9 nohupのマニュアルの中に何がまずいかは書いてあるから読め
ということでしょうか?
読んだ結果決定したことなので今更何ともいえないです。
trapというキーワードが与えられているのに、 マニュアルを再読しないの? ああ、もう済んだことだしね。
>>11 再読はしています。済ますつもりもありません。
ハングアップのシグナルを無視してコマンドを実行するという点で
まだ違いが読み取れていません。
"nohup.out"なんつー謎のファイルが出現して,精神衛生上悪い。
そもそも,
>>990 に'&'の恐ろしい害が書いてあるのは,ちゃんと理解したのか?
>>992 の「僕不安なの〜」なんてレス見る限り,全く理解していないように思うのだが。
14 :
デフォルトの名無しさん :04/05/31 13:06
"nohup.out"なんつー謎のファイルが出現して,精神衛生上悪い。
そもそも,
>>990 に'&'の恐ろしい害が書いてあるのは,ちゃんと理解したのか?
>>992 の「僕不安なの〜」なんてレス見る限り,全く理解していないように思うのだが。
>>13 さっさと答えを書けばよいのでは?
そんなことで儚い優越感に浸っても仕方がないだろう。
16 :
デフォルトの名無しさん :04/05/31 23:13
18 :
デフォルトの名無しさん :04/06/04 06:02
POSIXのシグナルで、一つのハンドラを複数のシグナルに登録することはできますか?
できます。
selectシステムコールを使っていてタイムアウトは設定していないのに戻り値に-1が入って抜けてしまいます。 シグナル割り込みが発生していると思うのですがシグナルを無視するような方法なんてあるのでしょうか?
signal関数でできるかもしれない。 いずれにせよ、なんで-1が返ってるのかを確認するのが先だと思うが。
>>20 とりあえずerrnoがEINTRかどうか見てから判断しても遅くはないだろう
signalは無視することもできるが、単に無視しちゃまずい
場合もあるだろう(子プロセスからのSIGCHLDを待ってる場合など)
sigaction()なら古いsignal()より細かい制御ができるが、
sigaction()がサポートされてるかどうかとか
どんなシステムコールが再開をサポートしてるかとか
その辺はシステムによるんで、結局
while ((n_read = read(fd, buff, sizeof buff)) == -1 && errno == EINTR)
;
みたいにループにしちゃうのは良く使う手だ
>>21 >>22 ありがとうございます。
とりあえずerrnoを見てEINTRならループで回すことにします。
別に Unix に限ったことじゃないと思うが...。
(Windows は GetLastError() だったりするけど。)
ていうか、
>>20 は場当たり的杉。
select が -1 を返す
⇒ 「シグナル割り込みが発生していると思う」
⇒ 「シグナルを無視する」
errno みて、「あっ ! 割り込まれてんじゃん !!」とわかったら、「誰がシグナル送っとんじゃ、ゴラァー !!」と思うのが普通だと思ってたけど、最近はみんなこうなのか ?
>>25 サンプル数1で全国の星の数ほどいるプログラマの考え方はこれだと決定するのですね。
最近はみんなそ(略
ときに、誰がシグナルを投げたかなんてわかるんですか?
>>26 わかる。ぐぐれ。
ヒント: sigaction
(ヒントっていうかそのものか。藁)
>>26 >> 最近はみんなこうなのか ?
> サンプル数1で全国の星の数ほどいるプログラマの考え方はこれだと決定するのですね。
どこを見て「決定している」と判断しているか非常に興味がある。
最近は、こういう奴も多いのか ?
29 :
デフォルトの名無しさん :04/06/08 23:58
UNIXダサすぎ。 つかってて平気ですか?
↓久しぶりにキモーイのAAよろしこ。
UNIX最高なんだけどぉ
>>29 UNIX好きさ。快適だ。
君は何がいいと思うんだ?
OpenVMS
Unix最高だぜ! 一度Unixの良さを知ったら他の奴にはもう戻れない。
ここの住人はSmalltalkやInterlisp-Dみたいな環境使ったことないんだろうなあ。
Squeakが玩具である事だけは確認しました。
複数人が同時にログインして作業できるOSって、他にないからなあ。 UNIXがなかったらと思うとぞっとするよ。
viみたいな知障エディタしかないので なにもできない。
本物のviを使えるなんてすごい環境だな。
UNIXはなんか問題が起るとlibcやカーネルのソースまで おいかけて問題を探さなくちゃならない。ハッカーじゃない 普通の人の精神状態を平静に保つには、クローズドな システムがよい。分業と称した責任の擦り付け合い。
>> 41 > クローズドなシステムがよい。 例えば?
>>36 あなたが本当に Smalltalk や Lisp の信奉者であるなら UNIX の良さが分かると思うけど
(こないだ Medley 触ってみたけど、今の時代にあの中で生活するのは厳しいかな)。
2chの鯖だって、本当は原因追求しなくちゃいけない。
rootさんに悪いからあんまり触れないけど。
>>42 Solaris
ちなみに俺の中ではクローズドなUNIXなるものはない。
41を44の返答で補ってみた. > UNIXは(Solarisと違って)なんか問題が起るとlibcやカーネルのソースまで > おいかけて問題を探さなくちゃならない。ハッカーじゃない > 普通の人の精神状態を平静に保つには、クローズドな > システム(例えばSolaris)がよい。分業と称した責任の擦り付け合い。 Solarisで開発したことないから,よく分かんないんですけど, Solarisには,例え問題が起きてもlibcやカーネルのソースまで 追いかけなくても問題が解決する機構があるんでしょうか? それとも,Solrarisのカーネルやlibcには,そもそも問題がないとの主張ですか? 「クローズド」の意味を私が理解できてないのかな?
>>45 > Solarisには,例え問題が起きてもlibcやカーネルのソースまで
> 追いかけなくても問題が解決する機構があるんでしょうか?
サポートと言うありがたい機能がついてるからな。
あまり役に立たなかったりするけど...。
商用のメリットって、わかんねえことはサポートに投げられることだよな。 UNIXに限らんけど。
クソ遅いshが基本のUNIXなんて早く死滅すればいいのにね。。 shスクリプトあらかじめバイトコンパイルとかやってキャッシュ化するとかできんの? どうせそれやっても遅だろうけど。
shが遅ければPerlで書いてしまうというのもあるけどぉ? それでも遅いと感じるなら、Cで書くしかないけど。
シェルの処理速度が百倍速くても、殆ど体感的には誤差の範囲だと思うけど。 fork() とかコマンド自体の事なら、十分速いから無問題。
だーから実際計ればわかるがshが一番時間食ってるんだよ。 クソ遅え。。 アホコマンド連発する文化だしな。
>>51 そんなのは処理依存だし、時間掛かる処理に sh を使っているおまいが悪い。
つか UNIX の基本は sh じゃなくて C だろ。
↑アフォ? 処理系依存て。
↑日本語で書いたつもりだが・・・?
処理依存と処理系依存の違いについて
誰も処理系の話などしてない。
shが時間食うか? 個々のコマンドの方が時間かかると思うのだが。
さぁ、いよいよ荒れてきました。
shが時間を食うと言うより、個々のコマンドのプロセスを生成/消滅させるのに時間を食う。 そろそろ終わりにしようや
>>52 ですよね.
>>51 調べたと言うんなら,律速段階をCなりなんなり使って最適化すりゃいいじゃん.
あなたには選択の自由がある.
まあshの場合「やりたい仕事の内容」と「それにかかる時間」が明らかに 見合わない場合はあるよね その辺は適当に。 典型的な例がtestだのechoだのdateだのexprだのだ まあ例をあげたらキリがないがな これがshの組み込みになってない場合は明らかに時間がかかりすぎる ループの中で使ったりしたらシャレにならん 一行メッセージを出力するだけのためにfdを複製しfork()exec()wait() を実行するのは割りがあわなすぎる ま、Cってのは極端だな 他のスクリプト言語が使えるならそっちを使えばいいだろう
そこでCommonLispですよ!
具体的にshにやらせていて、遅くて困ってるのって何?
>>61 cは最終兵器だよな(w
>>63 イパーイある。俺が担当したうちのなかで一例を挙げると「ローダの無いRDBへの更新コマンド群の作成」
shで10時間ほどかかっていたのをawkに書きなおした。5秒になった。
shを使っていて遅いならば、それはshを使うのが悪い。
sh類は単なる「プログラマブルランチャー」だと思うべし
Windows上のbatファイルで全てやろうとする変態がいたら見てみたいものだ。
つか、shの中からawkなり自作プログラムなりを起動するのがふつうだろ。 shは個々のプログラムでは制御しにくい全体の処理フローを担当。
一度書いたshを見直してみるのが一番はやいと思いますが・・
どうだろう むしろshベースのツールボックス的アプローチが伝統で 性能や機能にに問題があったら他のものを使う が基本だと思うんだが、shの「ツールボックス的アプローチ」 がある意味「やりすぎ」なんだよな echoだのtestだのexprだのまでが外だしってのは 昔のデザインなのにあそこまで富豪的なのはある意味すげえ tclはコマンド(プロセス) が コマンド関数 に置き変わっただけでものすごくshに似てるけど 当たり前の話として、比べものにならないほど速いよね インタプリタの中ではそれでも遅い部類だけど Cなんて使うまでも無いことが多いよ。ただやっぱり shの非効率は、時として次元が違いすぎるものになる。
wgetはその基本的な機能をライブラリとして外に出して欲しいな。
70 :
デフォルトの名無しさん :04/06/11 21:31
画像データを実行ファイルに埋め込んで使うことはできますか? 言語はC++です。
できる。がんばって配列として打ちこみなさい。
>>64 それは元のshell script書いた奴が糞だっただけかも知れないので、
目的じゃなくて、処理内容を書いてみなよ。(目的書いてどうする!?)
まあ、shell scriptでヘビーな文字列処理はやらない方がいい、
これは議論の余地がないけどな。お爺ちゃんも言ってた。
>>70 xbm, xpm形式は、
画像データファイルそのものが、header fileとして利用できる。
>>72 ネタかハッタリだろ。
いくら sh が遅いと言っても、awk の 7200倍も遅いわけがない。
7199倍遅い
>>74 そうだな、作りによっては7200倍どころじゃないだろうからな(w
以下のshスクリプトはcat -nの真似をするが(正確に同じではないが)
ここまで遅いものを他のスクリプト言語(awkを含む)で作るのは難しいだろう。
ためしにちょっとでかいファイルを読ませてみ。死ぬから。
ま、こんなものは当然誰もつくらない。すなおにcat -nを使えばよいからだ。
しかし、readもechoも、それをループの中で使うことも、それ自体では
ごく普通のshスクリプトで用いられる可能性がある点に注意だ。
for i
do
exec <$i
lineno=1
while read line
do
echo $lineno "$line"
lineno=`expr $lineno + 1`
done
done
その、アホが作ったshをいまだにありがたく使っている重度のアホもいる。 UNIXは基本的に、こうしたアホスパイラルで構築されている事が随所で観測できる。
Bourneってここまでアホだったのか…
>>77-79 有名なハナシだろそれ。
似たような風習は昔はちらほらあった。
現在の基準で過去を断罪すること勿れだよ。
>>76 単に処理の比率の問題だろ。
shスクリプトでループ回すときは内側の処理はもっと重いのが普通だし、
awkじゃできないこともある。
行番号つけるために
>>76 みたいなことして使えないと評価する奴がいるとしたら
適切な道具の使い方を知らないそいつの頭が使えないだけの話。
>>72 数値計算もやらない方がいい。
>>76 長いわりに話のレベルが低くて激藁
どんな言語だってループ(再帰)はあるし、
ループの中で使える処理の重いサブルーチンがある。
そのfor文は…
82 :
デフォルトの名無しさん :04/06/12 12:01
>>76 > そうだな、作りによっては7200倍どころじゃないだろうからな(w
実際にやってみた。
OS: FreeBSD 4.7R
CPU: Pentium200MHz
Mem: 48MB
% /usr/sbin/time /tmp/76.sh /usr/src/sys/sys/* > /dev/null
2088.41 real 85.80 user 394.67 sys
% /usr/sbin/time cat -n /usr/src/sys/sys/* > /dev/null
0.56 real 0.44 user 0.11 sys
まあ、遅いが 7200倍も違わない。
ついでに言うと、誰が考えても expr の呼び出しに時間がかかっているのは明白。
FreeBSD の sh は数値演算を sh 自身でできるから、
10c10
< lineno=`expr $lineno + 1`
---
> lineno=$(($lineno + 1))
とした版を作ると
% /usr/sbin/time /tmp/76-1.sh /usr/src/sys/sys/* > /dev/null
227.18 real 16.66 user 44.69 sys
と、400倍ぐらいになる。
>>83 >FreeBSD の sh は数値演算を sh 自身でできるから、
と言うからには
>< lineno=`expr $lineno + 1`
>---
>> lineno=$(($lineno + 1))
これぐらいは内部で自動的に書き換えして欲しいよね。
互換性なくなるならイラネ。
>>84 そんな余分な自動化はいらんよ。
だいたい、expr がどんなプログラムかを sh が知っているわけじゃないんだし。
shイラネ
>>80 ごめんおれアホだから
> awkじゃできないこともある
awkぐらいにしか勝てないのですか?
>>81 何言ってるかわからないよ。もしかして俺よりレベル低いですか?
>>83 意外に早いな
ハノイの塔とかフィボナッチ数列にすべきだったか(w
確かに今どきのshellで明らかに遅くなるのはexprだけだろうな
あそこだけはどうしてもfork()&exec()とパイプからの読み取りが
発生するからな
>>85 でも今だにオープンソースのCの世界ではK&R風に書くかansi2knr.cは
つけるよね
Posix互換shellの機能は当然期待せずbourne shell互換に書くよね
>>76 もそういうscriptのつもりなんだけど
互換性ってのはそういうことでしょ
C++なんかもっとひどいよね
オープンソースだったら、shですべてやっちゃうような無茶なものは修正されるでしょ。
>>88 > でも今だにオープンソースのCの世界ではK&R風に書くかansi2knr.cは
> つけるよね
gccにバリバリ依存しているものも多いですが…
>>90 そうか?
どっちかというと、autoconfやgmakeに依存してるもののほうが多いような
気がするが
まあオープンソースといってもピンキリだからな
しかし、
・互換性を(さして)気にしなくていい
・極めてシビアな状況(/usr/binがつかえないなど)では実行できなくてもいい
んなら、shスクリプトにする必要なんぞどこにもない気がしないか
特にposix shなんて中途半端のきわみだという気がするが
といって、他のスクリプト系だと非互換部分が大きすぎるし。 awkくらいまで枯れてればいいけど。
いやshでもコマンド仕様自体はシステムによって非互換じゃん よくあるのがecho()とかいう関数(echoのくだらないラッパー)
バージョン違ったら動かねーとか、 そういう悲惨な状態にはなりにくいということ。
FreeBSD の sh は、bash のシンボリックリンクじゃなかったっけ?
*BSDの/bin/shは同じコードなの?
>>97 OpenBSDはかなり手が入ってる。Tab補完や履歴検索が出来るんで常用可。
ま、POSIX互換が普通と思ってる奴は少ないわな
ashだよな。
101 :
デフォルトの名無しさん :04/06/13 00:44
>>101 bashは(/bin/shとして起動した時にも)
独自拡張をoffに出来ないので*BSD方面では
/bin/shとしては評判が悪い。
>>98 Openのshはksh(pdksh)だぽ
cshイラネ
つーかcshのどこがCに似てんだよゴルァ 言ってみろよゴルァ
そこで、zsh ですよ。
bashって最悪。 $echo -eってしてみ。 さらに$printf -aのように-[a-zA-Z0-9]を表示しようとすると オプションと勘違いするし…。
110 :
デフォルトの名無しさん :04/06/13 07:39
Cで指定した時間が来たらシグナルを送ってくれるような関数ってありますか? setitimerだとかなり時間がずれるので正確なのがあればいいんですけど。 OSはRHLinux9です。
どれくらいの正確さを要求している? 秒?ミリ秒?ナノ秒?
>>111 そこまで正確じゃなくて分単位程度の正確さを求めています。
夜間だけプログラムを動かして朝の7時に処理を止めたいので指定した時刻に
シグナルを送ってくれるような関数があればいいんですけど。
itimerって分以上にズレるんか・・・知らんかった
>>112 > 夜間だけプログラムを動かして朝の7時に処理を止めたい
それはat(またはcron)とkillの組み合わせでいいような...
>>114 7時までに止めたいのは一部の処理でその後にもいくらか処理したいので
KILLはできません。
setitimerで1分ごとにシグナル送ってハンドラ内でtime関数を使って
設定時刻と比較するしかないのかな。
なんかもっとスマートな方法がありそうな気がするけど。
>>115 > KILLはできません。
それはKILL -TERMのことか? 他のsignal使えよ。、
setitimer(2)は分単位でずれることはないしな。
clock_nanosleep+TIMER_ABSTIMEはどうだ?
>>116-117 すいません。killについてよく知りませんでした。
確かになんとかなりそうです。ありがとうございます。
デーモン作ってビジーループで時間見ても良いんじゃないかとね?
ビジーループはまずい。
124 :
デフォルトの名無しさん :04/06/13 16:57
kill me!
昔、とある現場でファイルの構成管理にSCCSというのを使っていたので 懐かしく思い、いろいろ検索してはみたもののSCCSのダウンロードサイト や解説ページが見つかりません。どなたかご存知ないでしょうか。
学校の課題で 「MIDIダイレクト、sound文で、音の高さのデータを共用したい。 あなたの考え方を述べなさい。」 というレポートを書かないといけないのですが、 図書館や本屋さんで調べても内容が難しくてわからず、何を 共用すればいいかもまったく検討もつきません。 どういう風にまとめればいいでしょうか? 何かアドバイスを頂ければと思い、ここに来ました。 答えにくい質問だとは思いますがどなたかアドバイスを いただけると助かります。 お願いします!
宿題スレに池
どこにあるんですか?
>>126 商用 UNIX なら今でも入っています。フリーでは sccs 互換の cssc というプログラムが
あったんですが、今探したら見つかりませんでした。
おれもよくわからんが、 「あなたの考えを述べなさい」だから、 「その内容では、何を言いたいのか分かりません」 でもいいんじゃないかと思った。
134 :
デフォルトの名無しさん :04/06/13 21:13
Linuxでプログラミングの勉強を始めようと思っていまつ。 pythonから始めたほうがいいとハッカーサイトに書いてあったのでつが なにを組んでいいのかわかりません。 Cは少し勉強したことがありまつ。 ハッカーになりたいのでつ よろしくでつ
>>134 ハッカーになりたいならインタープリタを書くのがお勧め。
最初は電卓とか、初期設定ファイル用のパーサからかな。
136 :
デフォルトの名無しさん :04/06/13 22:11
>>135 ありがとうございまつ。
やっぱりpythonからでつか?
がんがってみまつ。
137 :
デフォルトの名無しさん :04/06/13 22:17
>>136 インタプリタ「を」書く。
python用のインタプリタを書くつもりなら別にいいけど。
とりあえずCやっとかないと、カーネルソースすら読めねぇって。
scheme のインタプリタが楽だよね。
ワシらの若い頃は「おまえ scheme の処理系も書けないの、プ」とか「おまえ エディタも書けないの、プ」とか「おまえ版管理ソフトも書けないの、プ」と か言われたもんじゃ…。 パーサ、メモリ管理、ファイル処理、文字列検索、文字列比較、か。なるほど。
141 :
デフォルトの名無しさん :04/06/14 08:49
最近はみんなマルチメディア方面に一所懸命で 記号処理ツールの作成はやらないのではないかな。
>>110 でsetitimerの時間がずれるって書いたけど単に別の部分のalarmと競合して
itimerが無効になってただけだった・・
どうりで指定した時間になっても終わらないはずだ。
とりあえずkillallでなんとか思い通りに止まってくれました。
競合すると言うか、sleep がシグナル (SIGALARM) で割り込まれるだけだと思うが。
>>142 マルチメディア方面と言っても、
JPEGやMPEG1のdecodingなど
>>140 とたいして変わりないよね。
147 :
デフォルトの名無しさん :04/06/16 01:30
UNIXでマルチメディアだ、とか聞くと笑っちゃうよ。 だってうんこsh画面のイメージが強すぎて、 こんなんでマルチメディアできんの?? とか先入観入って思わずSGIとかの存在忘れちゃうしよ。 ウププ ところで本当にできてるの? UNIXでマルチメディア(禿藁
148 :
デフォルトの名無しさん :04/06/16 01:31
できているよ。 真のマルチメディアはUNIXにあり
ほんとに?(藁 だってうんこshが
ていうかさ、うんこsh使ってる人って、 マルチメディアが何だかわかってる?(藁 絶対わかってないよね。 コワー(藁
マルチメディア?
扱うデータ形式の操作やとりまわしが面倒なだけなような
だれか他の特質を回答希望
>>151 だれならわかっているかを回答よろしく
>>151 先生!
「マルチメディア」って分かりません。
マルチメディアってなんですか?
○血メディア
マルチメディアという term が相当古い感じはするけど、グラフィックやるにも X じゃ オーバーヘッドが大きそうな気はする。SGI が頑張っていた頃はそうでもなかったのかな? サウンド関連は知らない。
Macはそこそこがんばってる。 糞重いけど。
>>155 > オーバーヘッドが大きそうな気はする。
想像で言うなよ。お前知識(というか伝聞)が古すぎだよ。
>>156 一般利用者はMac OS Xでいいだろうけど、
この板のメインキャストであるプログラマから観たら、
糞APIと糞言語のシステムだな。
普通にtelnetで入ってgccとか使ってる分にはその辺のUNIXと変わらない。
160 :
デフォルトの名無しさん :04/06/17 11:54
>>157 今の X は、Windows みたいなカーネル空間に一部突っ込んじゃう様な実装に比べても、
十分な速度が出てるって言ってます?
>>161 きょうびのハードじゃ「カーネル空間に一部突っ込んじゃう」必要性はあんまりないのでは?
むしろ...
俺のイメージね。 X: ウィジェット毎にソケット作るよ。 Win: GDI はカーネルモジュールだよ。
Xももはやビットマップ転送にしか使われてないねぇ それならもうカーネルの近くに入ってもいいと思うよ
Xはうんこだろ
>>166 くだらない煽りはUNIX板でやってくれないかな?
XがWindowsのように早いウィンドウシステムだったら誰も文句は言わないだろう。
Xのほうが早いですよ
>>168 どういう環境,用途で使うからXの速度に不満が出るの?
ちょっと興味がある.
ソフト,ハードとも教えてみてよ.
Xが遅いというとどうしてこうも必死な反応が返って来るんだろうか。
Xは速いよ。角度とか。
じゃーねー。 『Xlibがとにかく遅い!!』 『Xlibのオーバヘッドがでかくて我慢ならん!!!』
自分で書き直せば?
>>174 別に特殊な用途ではないのね?
ハードは何使ってるの?
OSは?
たかが描画命令程度でプロセス間通信するなんてオーバーヘッド多すぎ。 バカじゃねえの。
そういう設計なんだからしょーがないじゃん
>>177 それが律速段階になってるのは確認したの?
177は利用している環境(ハード,ソフト)が特殊なのか,
それともそれを感じる主観が特殊なのか?
バカ発見
(´-`).。oO(
>>177 は「律速段階」をググってる段階だと思うな)
>>179 もう一個あった.
私の主観が特殊って可能性もあるか....
まぁいいや.環境を晒してみてよ.
[現在このスレは、ほのかに荒れています。しばらく、そのままの状態でお待ち下さい。]
Xを使わずにすむならそうしたいねぇ あんな古い設計はそろそろおさらばしたいところ
GnuFXが必要だろ
Longhorn駄目じゃん。こりゃ当分デスクトップはWindows2000のままだな。
プロセス間通信と区別が付いてない馬鹿発見
189 :
デフォルトの名無しさん :04/06/19 10:04
190 :
デフォルトの名無しさん :04/06/19 10:24
早く教えれ
>>188 誰が何とプロセス間通信の区別が付いていないのかわからないが、
LonghornでCSRSS.exeを使うと明記されていないので、NT3.51やXのようにCSRSS.exeやXサーバ
とプロセス間通信する形でグラフィック関係を実装するとはっきり明記されているわけではないん
だけど、ぱっと見ではNT3.51に戻るようにしか見えないのよね。
Window ManagerもNT3.51と同じようにユーザモードに戻るので、少なくともWindowの処理には
Window Managerとのプロセス間通信が必要になるし、通常の描画処理にしても、CSRSS.exeや
win32k.sysなど単一のコンポーネントが管理するモデルを変更するとは思えない。
> 少なくともWindowの処理には > Window Managerとのプロセス間通信が必要になるし 馬鹿発見
粘着うぜえ スレ違いだろ
194 :
デフォルトの名無しさん :04/06/19 10:50
>>192 ああ、そうか。必ずしもWindow Managerをプロセスとして実装する必要はないのか。
でも、その場合でも、画面という単一のリソースを複数のアプリからアクセスすることになる以上、
画面に対する排他制御が必要になり、そのため画面の一部になるWindowの管理や描画には、アプリ
ケーション間でプロセス間通信してWindowのロック等をすることになるから、どっかでプロセス間
通信が必要になることには変わりない。
それに、Windowの管理のためのリソースは排他制御のため他のアプリからアクセスできる場所にある
必要があり、かつその場所が独立したWindow Managerユーザプロセス内部ではないとすると、カー
ネルがリソースを保持することになり、Window Managerがユーザモードに移ることと矛盾するぞ。
プロセス間通信なしにユーザモードだけでどうやってWindow管理できるか教えてくれ。アフォなんで
わからん。
TCP/IPはリソース共有してるが、使うのにプロセス間通信してないぞ。
え
> カーネルがリソースを保持することになり、Window Managerが > ユーザモードに移ることと矛盾するぞ。 (´-`).。oO(Window Managerがユーザモードに移るって誰が言ったんだろう)
>>198 仮定の話だよ。池沼は話の流れが読めないのかそうか。
いいから >プロセス間通信と区別が付いてない馬鹿発見 これについて教えれ
スレ違いというのが分からないのか・・・
最後にXの話に戻れば許すからたまには実のある話聞かせろ知ったか連中が
やっぱマイクロカーネル&マルチOSサーバ最強だよな。 またHurd使い始めるかな。
205 :
: デフォルトの名無しさん :04/06/19 19:09
おまえら本とに亜ふぉだな(w まあおれはBSD使ってるから大丈夫だけどな。
何が大丈夫なんだ?w
207 :
デフォルトの名無しさん :04/06/19 22:28
>>205 おまえもか。おれもさ。
お互い勝ち組でいこうや
OSぐらい選り好みせずになんでもバリバリ使え。
Linuxを使っている俺は負け組か・・・
210 :
デフォルトの名無しさん :04/06/21 11:04
LinuxでSIGSEGVやSIGFPEなどのエラーシグナルが発生した場合に、C++の例外を送出したいのですが、どうしたらいいでしょう? シグナルハンドラの中から例外を出してもうまくいきませんでした。。。
出来ません。
>>210 >LinuxでSIGSEGVやSIGFPEなどのエラーシグナルが発生した場合に、
そのシグナルを出すことがむしろ問題だぞ。
バグのあるソースを修正しろYO。
>>204-205 そうか、マイクロカーネルな BSD であらせられる Mac OS X 様は最高か!
>>210 static SignalCode = 0;
static void Handler(int Code){
SignalCode = Code;
}
sigaction(SIGSEGV, Handler の登録);
sigaction(SIGFPE, Handler の登録);
try {
/* なんかの処理 */
if(SignalCode != 0) throw SignalCode;
/* なんかの処理 */
if(SignalCode != 0) throw SignalCode;
/* なんかの処理 */
if(SignalCode != 0) throw SignalCode;
} catch(int Code){
/* シグナルの処理 */
}
とやるぐらいしか思いつかん。
>>212 SIGSEGV や SIGFPE の原因が必ずしもソースにあるわけじゃないぞ。
何故そんな不気味なSIGNALをキャッチしたいのか、むしろ仕様を疑うぞ。 それとも、そのアプリがうまく動く自身が無いのか?
>>216 「SIGSEGV や SIGFPE が発生した場合には、C++の例外を投げる」
という仕様を与えられて数値計算か何かのライブラリを作ってるんじゃないの?
いずれにしても変な仕様。
219 :
デフォルトの名無しさん :04/06/22 14:01
C99 floating point rounding and exception handling は知ってるのかな? feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept
SIGSEGVは?
UNIX のソースを開いたとき CL という 小さい文字が改行の位置に出てくるのですが・・・ これは何なのでしょう
改行コード
改行じゃなく改頁でしょ。
>>223 印刷時にそのコード(CL)で改ページするって奴ね。
CR+LF の C と L を取って CL って事は無いかな? ローカルに持ってくる時に改行コードが変わったとか。 何にしてもエディタ依存の様な。
うわ!改頁コードを知らない初心者がこんなにいるとは...
「改頁コード」なんか知らん。 0x0C の事なら書式送り (form feed) だし、FF とか ^L と表すからね。
書式送りは改頁に使うとは決められていないから、一行毎に入っていても エディタによっては普通に見られるね。
見られるってのは読めるって意味ね。
>>223 元は tar.gz でアーカイブされたファイルじゃなかった?
235 :
デフォルトの名無しさん :04/06/29 21:06
COBOLERはみんなそういうワ
>>232 > 「改頁コード」なんか知らん。
改頁コード: 65件
改ページコード: 219件
書式送り: 109件
>>236 ホントだ。プリンタ由来の単語みたいだね。JIS 的にも「改頁」なのかな。
プレーンテキストでは FF の意味は決まってなかった気がするけど。
つぅか使わん。
239 :
デフォルトの名無しさん :04/06/30 01:32
/::::::::::::::: ..:::::::::::::::i、::::::::::::::::::::'、':,. / ヽ
/::::::::::: ....:::::::::::::::::::::i:::!`、:ト、::::::::::::i i! / i
>>238 i ...::::::|'、ヽ;::::::::::::::|,!:!__リ,,'iヽ::l''、:'、 / /
| ..::::::::;:::i!:i ヾ:、ヽ:::::::::| リ , -─ リ i;il:ヽ, i / あはははは〜
l:::::::::::::::i',i ':i ,メ、 \;:l '゙ `、 !::::/l ...::::::/``ヽ
l::ヽ:::::ヽ:i,レ',.゙-‐'''' ',/'/..::::::::::/ l'ヽ;、
i:::::>、:ヾ,' / _,.. -‐'ヾi ,レ'::::::::::;r':.. / i_\
i:::i. `'‐,ゝ i" '! ,.‐''" :::::::::::i゙::::::::.../. ノ 'i
!::\ `ヽ ':, l{ ..:::::/::L,. ‐'":::::;/ !
l::::::::`''‐r\ ヽ.,__,.ノィ'‐-‐''"'ォ‐--,゙弋''''"::::::;.ノ
|::::::::;ィ:::}、 ``'''─--、-‐ニ┤ ___ハ,`''ーヽ-'=‐''"
/::::::::::::::: ..:::::::::::::::i、::::::::::::::::::::'、':,. / ヽ
/::::::::::: ....:::::::::::::::::::::i:::!`、:ト、::::::::::::i i! / i
>>232 i ...::::::|'、ヽ;::::::::::::::|,!:!__リ,,'iヽ::l''、:'、 / /
| ..::::::::;:::i!:i ヾ:、ヽ:::::::::| リ , -─ リ i;il:ヽ, i / あはははは〜
l:::::::::::::::i',i ':i ,メ、 \;:l '゙ `、 !::::/l ...::::::/``ヽ
l::ヽ:::::ヽ:i,レ',.゙-‐'''' ',/'/..::::::::::/ l'ヽ;、
i:::::>、:ヾ,' / _,.. -‐'ヾi ,レ'::::::::::;r':.. / i_\
i:::i. `'‐,ゝ i" '! ,.‐''" :::::::::::i゙::::::::.../. ノ 'i
!::\ `ヽ ':, l{ ..:::::/::L,. ‐'":::::;/ !
l::::::::`''‐r\ ヽ.,__,.ノィ'‐-‐''"'ォ‐--,゙弋''''"::::::;.ノ
|::::::::;ィ:::}、 ``'''─--、-‐ニ┤ ___ハ,`''ーヽ-'=‐''"
画像ソフトを作成しているのですが、 libpngを使い、ダイナミックリンクで読み込んでいます。 これをlibpngが導入されていない環境では、 使用せず、導入されている環境では使用するような方法はあるのでしょうか? スタティックリンクは使いたくないので・・・。 すいませんが、お願いします。
>>242 コンパイル時だったら
$ ./configure <---------
$ make
# make install
実行時の判断は???
>>243
#include <stdio.h>
dlopen()?
実行時の判断て,libcのバージョン違ったらどうするんだ? バイナリ配布なら,staticにリンクするべき。
>>248 そんなに愉快にI/Fは変わらないので問題なしです。
251 :
デフォルトの名無しさん :04/07/07 07:42
signalの使い方がが良く見えないんで教えてください。 1. longjmp( )は、シグナルハンドラからの使用を考慮されている、 あるいは使用例としてよく出てくるんですが 実際、シグナルハンドラからのlongjmp( )は安全ですか? というのは、3Cの関数あたりからシグナルが発生したときに メモリリークやなにかの状態不一致など発生しないよう考慮されているんでしょうか? たとえば、malloc( )の中でメモリブロックのチェインを組み替えている 途中でシグナル ->longjmp( ) ->組み換え中おメモリブロックは忘れ去られたまま なんてことにはならないようになっているんでしょうか? 2. シグナルハンドラとそうでない部分との排他制御は そうでない部分で、シグナルをマスクするだけで十分ですか? 3. シグナルハンドラが実行されているさいちゅうに 多重に呼び出されることはありますか?
252 :
デフォルトの名無しさん :04/07/07 07:44
タイプミス。 s/組み換え中おメモリブロックは忘れ去られたまま/組み換え中のメモリブロックは忘れ去られたまま/ ごめんなさい。
>>251 1.シグナル受信時は即時にハンドラを起動しない。
malloc時はアトミックに処理するはず。
2.>シグナルハンドラとそうでない部分との排他制御は
>そうでない部分で、シグナルをマスクするだけで十分ですか?
言ってる意味がわからん。そうでない部分とは?
3.>シグナルハンドラが実行されているさいちゅうに
>多重に呼び出されることはありますか?
何が多重かわからんのだが、シグナルハンドラ処理時に同じシグナルを受けた場合は
ブロックする。多重には実行されない。
RTFM
遅レスだが、
>>210 >LinuxでSIGSEGVやSIGFPEなどのエラーシグナルが発生した場合に、C++の例外を送出したいのですが、どうしたらいいでしょう?
>シグナルハンドラの中から例外を出してもうまくいきませんでした。。。
もし、バグでメモリを破壊していてSIGSEGVになったらどうする?
その作りは、信号が赤信号であるのにそのまま突っ走るようなものだな。
いつか衝突するぞ。そして原因究明が困難なものになるだろう。
>>251 > というのは、3Cの関数あたりからシグナルが発生したときに
> メモリリークやなにかの状態不一致など発生しないよう考慮されているんでしょうか?
それは君の仕事です。
> 2. シグナルハンドラとそうでない部分との排他制御は
> そうでない部分で、シグナルをマスクするだけで十分ですか?
シグナルに対する排他としては十分です。
ブロックされている間シグナルはプロセスに運ばれませんから。
> 3. シグナルハンドラが実行されているさいちゅうに
> 多重に呼び出されることはありますか?
UNIXによって方言があります。最近のは全部ブロックするはずですが。
>>254 そう言ったらあるWindows鯖ソフトの作者にバカにされたよ。
そいつは嬉々として一般保護違反を隠しながら動く痛いソフトを神面して配布しているよ。
しかし、
>>254 の言うのも間違っていると思うよ。
(一部の)signalには、異常報告の意味があるけど、
その時にC++の例外を投げて欲しいというのは、
ごく自然な要望だ。
>>257 で、問題はそれを誰に投げるかって話だな。
260 :
デフォルトの名無しさん :04/07/08 10:12
>>253 > malloc時はアトミックに処理するはず。
本当ですか?
アトミックってなんですか? ひょっとしてアトムの弟ですか?
そりゃコバルト・・・は兄か。
264 :
デフォルトの名無しさん :04/07/08 15:50
Read The Fucking Sourceウケタ
266 :
デフォルトの名無しさん :04/07/08 20:39
Cで可変長のCSVを切り出すのは面倒。 なんかいいライブラリないの?
267 :
デフォルトの名無しさん :04/07/08 20:41
strtok()を使ったり,strchr()で地道にやれか...。
Cで簡単にできる文字列処理などない。
Cで簡単にできる処理などない。
>>266 C++だったらboost::tokenizerとかあるけど
アトミックってたってどの次元でアトミックなのかが問題だろ。 1.スレッドに対してアトミックなのか? 2.シグナルに対してアトミックなのか? 3.プロセッサに対してアトミックなのか? 3ならば1,2を満たす。1と2は無関係。 ここで問題なのは2なんだが、mallocがアトミックなのは1じゃないのか?
>>271 スレッドに対してアトミックでも嬉しくも何ともない予感。
別のスレッドが確保してるであろうメモリに非同期にアクセスしに行くなんて自殺行為な訳で。
とか煽りつつどんなメリットがあるのか聞いてみたいテスト。
>>272 >>271 は、malloc() がスレッドセーフであろう、というようなことを言ってると思われ。
そうして、もちろんそうでなければ使い物にならない。
>>272 >別のスレッドが確保してるであろうメモリに
>非同期にアクセスしに行くなんて自殺行為な訳で。
>とか煽りつつどんなメリットがあるのか聞いてみたいテスト。
では煽られつつ答えるテスト。
malloc( )はヒープというプロセスに1つ、スレッド間で共有された資源
の操作をする関数。
獲得以降がスレッド個別の資源だと仮定すると、
malloc( )は共有資源を個別資源にする関数。
そのためには共有資源への操作が必要。
だからアトミックである必要がある。
当然free( )も同様。
>別のスレッドが確保してるであろうメモリに
>非同期にアクセスしに行くなんて自殺行為な訳で。
非同期にアクセスしたら死ぬけど、
非同期にならんようにミューテックスとかあるんじゃないのか?
ふと思ったけどアトミックと排他処理って同じもんなの? いくら排他しても処理途中で割り込まれる要素があればそれはアトミックとは言えない気がします。
>>275 いや俺も同じではないと思うが、
話を合わせている都合上、そうなってしまった。
すまん。
LISPのアトムも分解できるわけだが
ウランちゃんの衣服を分解・・・ハァハァ
何か誤解されたわけだが
排他することでアトミックであることを確保するんですよー
用語の使い方って難しいね。 おそらく中途半端な知識を持ってる人が結構誤解するのかもね。
>>251 > 1. longjmp( )は、シグナルハンドラからの使用を考慮されている、
> あるいは使用例としてよく出てくるんですが
> 実際、シグナルハンドラからのlongjmp( )は安全ですか?
ttp://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html より引用。
> In the presence of signals, all functions defined by this volume of
> IEEE Std 1003.1-2001 shall behave as defined when called from or
> interrupted by a signal-catching function, with a single exception:
> when a signal interrupts an unsafe function and the signal-catching
> function calls an unsafe function, the behavior is undefined.
で、malloc()もlongjmp()もsiglongjmp()もsignal unsafe。
よって、「malloc()中にシグナル発生 → シグナルハンドラ内でlongjmp()
(またはsiglongjmp())呼び出し」となった場合の動作は「undefined」。
実際にglibcのソースを眺めてみたが、シグナルに対して特別なことをやっては
いないみたいだから、メモリリークやデッドロックが発生する可能性があるな。
> 2. シグナルハンドラとそうでない部分との排他制御は
> そうでない部分で、シグナルをマスクするだけで十分ですか?
OK.
> 3. シグナルハンドラが実行されているさいちゅうに
> 多重に呼び出されることはありますか?
ここらへんについては、BSD由来のsignal()とSysV由来のsignal()とで
挙動が大きく違っていたが、新しいシグナル操作関数であるsigaction()では
そこら辺の混乱が解消されている。
ttp://www.opengroup.org/onlinepubs/009695399/functions/sigaction.html SA_NODEFERの項を見よ。
閑話休題: 割とメジャーなもので SIGSEGV をトラップしているものとしては、mpeglib なんかがある。 これは、MPEGデコーダの性質上 ・入力データは外部から与えられるため、信用できない(変なデータって実は結構ある) ・デコード処理は高速性が求められるため、最も内側のループにはエラーチェックを入れにくい (実際のとこチェック不可でエラーが発生する箇所は、DCテーブルの再構築時がほとんどみたいです) ・エラーが発生したとき、止めるよりはちょっと画像が乱れるだけで動いてくれた方が(大抵は)うれしい ・ストリームを適当に先へ進めば、エラーをリカバリできるポイントが見つかる から。 IA32 でいうところの 0:32 モデルじゃなくて、怪しげな操作をするときには 32:32 で 厳しくアクセス可能な範囲を限定したポインタが使えるとこういうとき便利っぽいですよね。
>>284 もうしわけありません。
どうもSIGSEGVをトラップする利点がわかりません。
SIGSEGVがある特定の区間以外発生することは無いっていうことなのでしょうか?
>>284 >IA32 でいうところの 0:32 モデルじゃなくて、怪しげな操作をするときには 32:32 で
>厳しくアクセス可能な範囲を限定したポインタが使えるとこういうとき便利っぽいですよね。
これってどういう意味なのでしょうか?
>>286 ごめんなさい。16:32 の間違いでした。
セグメント(セレクタ)16bit, オフセット32ビットのポインタを使ったメモリアクセスのことです。
>>285 既に 284 で4つ理由を書いています。
どれに同意できない(あるいはわからない)のですか?
話は変わるが主婦が家庭裁判所で訴えられるってどういう状況?
このスレ的にはUNIXプログラマと浮気した場合かな。
つーか、Java VMとかでもJITコンパイラを搭載しているようなやつは ぬるぽ^H^H^H NullPointerException を検出するために SIGSEGVをトラップしているものが多い。 # もちろんSunのHotspot VMもそう。
>>284 >・入力データは外部から与えられるため、信用できない(変なデータって実は結構ある)
>・デコード処理は高速性が求められるため、最も内側のループにはエラーチェックを入れにくい
> (実際のとこチェック不可でエラーが発生する箇所は、DCテーブルの再構築時がほとんどみたいです)
>・エラーが発生したとき、止めるよりはちょっと画像が乱れるだけで動いてくれた方が(大抵は)うれしい
>・ストリームを適当に先へ進めば、エラーをリカバリできるポイントが見つかる
これはSIGSEGVになる可能性があるという作りだってことですか?
そもそもSIGSEGVにならないように作らなければならないと思っていたのですが。
>>293-294 コードのこの範囲でSIGSEGVが発生する可能性があってそれはこうこうこういう状況で
その時はこうすればリカバリできるって完全に把握してSIGSEGVを受けとる場合がある
のよ。
普通のプログラムがバグなんかで予測してない挙動してSIGSEGVで落ちてるような状況
とは違う。
そういうプログラム書いてる時にバグ作りこんじゃうとどつぼにはまるけどね。
296 :
デフォルトの名無しさん :04/07/10 17:54
・デコード処理は高速性が求められるため、最も内側のループにはエラーチェックを入れにくい (実際のとこチェック不可でエラーが発生する箇所は、DCテーブルの再構築時がほとんどみたいです) ↑こんなの絶対に使いたくねー!!
297 :
デフォルトの名無しさん :04/07/10 18:17
冬ソナファンは民主党に投票しよう! 投稿者:わんこ 投稿日:2004/07/08 22:16 No.622 わたしはそれは在日韓国人に対する差別だと思うんです。 第二次大戦中の日本国民の韓国人に対する強制徴用、大量虐殺に始まり 今日での在日韓国人に対する差別。 その最たるものが在日韓国人に参政権がないことです。 日本人と同じく税金を払い義務を果たしているにもかかわらず、です。 ところが今回の参院選ではなんと民主党が在日韓国人に参政権を与えることを公約としています。 そこで我々冬ソナファンがヨン様の国、韓国の人々のために 立ち上がろうではないですか!! 冬ソナファンの力で民主党に政権を取らせ、在日韓国人の参政権獲得の手助けをしましょう!! ヨン様のためにがんばろう!!!
>>295 >コードのこの範囲でSIGSEGVが発生する可能性があってそれはこうこうこういう状況で
>その時はこうすればリカバリできるって完全に把握してSIGSEGVを受けとる場合がある
>のよ。
SIGSEGVが発生する可能性がわかっているならば、そうならないように作るべきでは?
それを知っていてあえてSIGSEGVを受信するような作りがよくわからないのです。
それが仕様であることはわかるんですけど、自分はその仕様に納得がいきません。
>>298 そうならないように自前のチェック入れると処理が重たくなるということでは?
300 :
デフォルトの名無しさん :04/07/10 21:45
それで間違えて書いちゃうようならSEGVになった方が まだ運がよくて、スタック書きつぶしたりしたら下手 すりゃセキュリティホールだよな。 間違えて読んじゃうだけならぎりぎりセーフ?
いやだから、 ・SEGVが発生する条件は完全に特定できている(ゼロ除算とか) ・それを回避する方法も分かりきっているが、コストがかかるので避けたい 場合に使うんじゃないの。
>>298 納得がいかなくてもやらざるを得ない、時の手段ってことでしょ。リミター解除して高速飛ばすようなもん。
これぞまさしく「素人にはお勧めできない」。
玄人にもお勧めできないけど。
>>301 >・SEGVが発生する条件は完全に特定できている(ゼロ除算とか)
ゼロ除算ってSIGSEGVでしたっけ?
もしかして、SIGSEGVに限らずsignal全般ってことを言いたいのでしょうか?
>>299 >そうならないように自前のチェック入れると処理が重たくなるということでは?
高速化の為にSIGSEGVをあえてするか堅牢性をあげるためにセキュリティ重視をするかって言われたら、
自分は後者を選ぶ。
高速化の為にあえてSIGSEGVなプログラム書くこと自体が理解できない。
306 :
デフォルトの名無しさん :04/07/10 23:07
>>305 激しく同意。
mpeglibという名前からしてライブラリなんだろうけど、絶対に使いたくないな。
308 :
デフォルトの名無しさん :04/07/10 23:13
なんだプラグインか。
セキュリティはどうだっていいんだが(OSごとセキュアにすりゃいいという話もあるし)、 結局環境依存では。
ネットワーク共有メモリの実装にSEGVとメモリ保護使った書き込み検出を してるライブラリが有って感心した記憶がある。変則的な手段だとは思う けど、忌み嫌うほどでも無いと思う。
Garbage Collection でも使ってたりするね。
>>310 MS Windowsでも、その汚いけれども高速な手段を結構使ってるらしいですね。
>>309 ようするに、「動けばいいや」ってことですか?
であるならば、もう何も言うまい。
でもさー、signalってprocess globalなんだよなぁ unixはそこがダサい
>>313 mpegのデコードの話だろ?
テーブル引くのに入力をチェックしないってだけじゃねーの?
不正な入力なら絵が壊れてもいいって割り切りでしょ。不正ならどうせ壊れるんだし。
>>314 プログラムの終了には全スレッドにシグナルを投げる必要がある?
>>314 process globalな割り込みが無いほうが困るのでは
ん、グローバル変数だって言いたいのか? たしかにシグナルはグローバルな設定だが・・・
フリーのOSで鯖を作るならkqueueが最高?
>>314 posix realtime extension
ちなみに昔null accessをSIGSEGVのsignal handlerで処理している
Lisp処理系があった。まあ別に速くはなってないと思うが。
>>322 シグナルハンドラではグローバルなフラグを立てる感じ?
>>320 OS毎に非ポータブルなハイパフォーマンスAPIがあるからそれ使え。
それがkqueueとは限らない。
>>318 ライブラリAとライブラリBがsignalの奪い合いをする可能性がある、ってこと?
まああんまり気にしたことはないけど。
ああ、JavaでJNI使うときに一度ハマったねぇ
>>325 て言うかシグナルをトラップするようなライブラリ好んで使うなと。
>>323 いや、longjmpしてLispの(throw ...)へ突入。
あ、(throw 'ぬるぽ)って書くべきだった?
>>327 こうなると構造化もへったくれもないですな。
C++とかなら舜殺しそう。。。
251でsignalハンドラからのlongjmpについて
質問したものです。
回答してくださったみなさま、ありがとうございます。
参考にさせていただきます。
特に、
>>282 さんの回答は根拠もしめされてまして
大変なっとくいくものでした。
ありがとうございました。
学校の課題で魔方陣が出ました。でも全く説明がなくて・・・。 c 氏名 日付 program pr2 integer a,i,j,k,l parameter(n=3) !n は奇数 dimension a(n,n) print '(1x,a,i2)','pr2 魔方陣 n=',n print *,'学生番号 氏名’ do k=0,n-1 do l=0,n-1 i=(k+l)*2+(n+1)/2+2 j=l-k+(3*n+1)/2 a(mod((i-1),n)+1,mod((j-1),n+1)=n*k+l+1 end do end do do i=1,n print '(9i5)', (a(i,j), j=1,n) end do end これは3×3で、課題はこれを9×9で計算して提出しろ、というものなんですが、 どこをどう変えればいいのかわかりません。 助けてください。
宿題は宿題スレへ
>>314 Win32だとSEHがありますからね。
あれはtry - catch - finallyのセマンティクスで使えるから
ものすごく楽だし美しい
まあスタック巻き戻しの際にお掃除とかしてくれるわけじゃないから
C++ではいまいち使い物にならないけど
>>300 あたりの人
喪前らが普通に使っている JPEG ライブラリ、MP3 ライブラリ、MPEGデコードライブラリの
大半はトンでもない不正データを食わせると sigsegv 起こしますよ。
んで、たかだか「入力ファイルが変」ってだけでバキバキ落ちる画像・動画再生プログラムは
ユーザに受け入れられませんよ。
> 大半はトンでもない不正データを食わせると sigsegv 起こしますよ。 それが検証できるデータはありますか?
あるよ
UNIXプログラマになるには、libcのソースコードを暗記しないとダメなんですか? UNIXの世界で有名なミスターtheo氏がそのようなことを言ってましたが。
アン肝なにも俺が書いたわけだが
gccのソースを暗記しよう 暗記パンとか使って
なんだその暗記パンって
>>343 忘れてくれ・・
世代の違い?
ドラえもん 暗記パン
あたりで検索してみて
>>344 最後は食べ過ぎたのび太が自爆するんだっけか?
エネルギーを吸収する敵にはキャパ以上のエネルギーを叩き込んで自己崩壊を待つ。
昔のアニメの定石ですな・・・。
347 :
デフォルトの名無しさん :04/07/12 23:53
668 :デフォルトの名無しさん :04/07/12 22:28 rm -f calculation.o gcc -g-c ship.h -lm gcc:Compilation of header file requested make:***[calculation] Error1 と出力されます. 今日初めてwindows環境でUNIXを使うのですが、これの解決策を教えて下さいませんか. お願い致します. デスクトップ上の問題なのでしょうか?
誰か翻訳コンニャクを
>>347 の今後の為にも、答えない方がいいのかな…
スティーブンスの詳解UNIXプログラミングすげーなコレ!!! かなり高価だけど、真剣に読み進めてプログラミングを繰り返していくと 技術が腕に染み込んでいくのがわかる。
怖くて読めないな。 うわ〜染み込んでる〜。
頭には浸みないのか。
351は脳まで筋肉でできているような奴だから。
>>351 はまじめないいレスじゃないか。いぢめるなよ。
実際スティーブンスの本は素晴らしいよね。 この人のネットワークプログラミングの本は、 今でも漏れのバイブルです。
日本人でもスティーブンスくらいドキュメンテーション能力のある人いないかね。
スティーブンスの本はUNIXの歴史が詰まってるところがよいわけで、 単にUNIXに詳しいだけの人がああいう本を書けるのかどうか。
スティーブンス氏は訴追の対象です。
361 :
デフォルトの名無しさん :04/07/15 18:22
cp パス パス/ファイル2> /dev/null 上のコマンドの>と/dev/null の意味は何ですか?。
364 :
デフォルトの名無しさん :04/07/15 21:01
cpってエラー以外なんか出力したっけ?
0個のファイルをコピーしました
「ファイル2」の2は、実は標準エラーの2というオチに1メセタ。
>>366 そうだと思うが、書いた本人が判って無いと思う。
>>368 No such file or directory
Permission denied
とか、いろいろ。
>>369 cpって エ ラ ー 以 外 なんか出力したっけ?
俺のcpは元旦に「あけましておめでとうございます」って言うよ
cpに「できちゃったみたい」って言われたときはどうしようかと思ったよ
fork() して exec() する前ならまだ間に合う。kill しちゃいな。
ここは家庭不和なシェルスクリプトですね
winのようにspawnして産み捨て
でも、よく考えたら親が子が死ぬのを待つなんて非現実的だよな。(w 親の方が長く生き続けるっていう概念なのかな。 man 2 wait まぁ、そもそも人間社会にあてはめること自体がおかしいのだけどね。
親が見捨てるとゾンビになるし
そりゃ正しくないような。unixは暗黒の世界なので死ぬと必ずzombieになる。 waitで正しく看取られて初めて成仏する。 親なき場合は神の子initが月に代わって成敗する。
成敗じゃねえだろうよ。
じゃあ、月に代わっておしおきですか?
383 :
デフォルトの名無しさん :04/07/20 07:51
forkって子供を産むというよりも単細胞生物の分裂みたいだよね。
メモリをwriteするごとに成長するプラナリア
んー、いまいちか。
386 :
デフォルトの名無しさん :04/07/20 10:11
印刷に関して教えてください。 unixとwindows双方から印刷できるようにLPDを使用しているのですが、 windows から lpr にて印刷する場合portなどを指定しなければならず、 パソコンをあまり使用しない人には使いにくいので、LAN接続されてい るプリンタ一覧を表示したいのですが、プリンタ情報を取得するAPIな どありますか?
unixと言ってもいろいろあるからなあ 商用ならサポートへ フリーのやつなら環境書け
んー、場合によってはSNMPかなあ?
シェルの質問もここでいい? 1000,10,AB 2000,11,ABCDE 3000,12,AB てな感じのテキストファイルを 1000,10,AB△△△ 2000,11,ABCDE 3000,12,AB△△△ ※△は全角スペースのつもり でな具合に固定長になるよう空白埋めしたいんだけど、 この処理はシェルだけで実現できる?
その機能をもったシェルを自作汁
>>390 実は時間がなくて、シェルで組めないか時間がかかりそうであれば、
他の手段に切り替えないといけなくなってしまったのよ。
(書き方が悪かった。 スマソ)
やれば、なんとかできそうなのね。
お前,小学生か? 息子の作文でもみてる気分になるぞ。 時間がかかりそうって何だよ,糞野郎?
>>394 うむ。できるね。
何かすぐCで考えちゃう自分に反省。
396 :
デフォルトの名無しさん :04/07/23 05:36
age
外部コマンドを使わずshellだけだとけっこう大変だね。 特にtestもexprもないようなshellだとかなりつらそうだ。 パズルとしては楽しめるかもしれない。 外部コマンドありならawkでもperlでも呼びゃ一発なので つまらん。perlを呼ぶだけのスクリプトをshellスクリプト と呼んでいいかというギモンはあるけどな。 ということでshellだけで書いたソース希望。
シェルって何の事意味してるの? bash?csh?
シェルスクリプトというと /bin/sh に決まってるだろ
>>386 同一セグメント内の全アドレスへ対して、
snmp情報情報を取得して判断する、
TCPなら、9100番へconnectしてRSTが帰ってこないか、
UDPならICMPのエラー返答
などで判断するしかないんじゃない?
API一発はむり。
>>398 シェルって言ったらExplorerに決まってるだろ
>>386 UNIXでsamba動かして、printer serverやれば?
>>403 ばーか、DOSSHELL しかないだろ。
405 :
デフォルトの名無しさん :04/07/24 13:12
(-_-;)
#!/winnt/system32/explorer.exe
winntとは限らないだろ。馬鹿?
#!/dev/null
>>408 おまえんちの/dev/nullには+xが付いてる訳だな。
410 :
デフォルトの名無しさん :04/07/24 14:06
409=407
>>407 環境に応じて各自書き換えるくらい常識だろ。
>>412 %WINDIR%
まぁ、両刀使いからしたら常識な訳だが。
はじめてUNIXのプロジェクトやってて、TeraTerm使って Winから接続してコンパイルしてんですけど、UNIXって VC++みたいにステップ実行できる環境ってないんですか?
>>414 gdb。
emacsがあればモアベター
>>414 WindowsのcygwinのXFree86入れてdddとか。
UDPのソケット使っててselect待ちしてるんですけど、特定のFDが有効かどうかって判断できないでしょうか? タイムアウト設定してポーリングっていうのは負荷がかかりそうなのであまりやりたくないです。
「有効」ってどういう状態?
419 :
デフォルトの名無しさん :04/07/25 14:44
夏だな。
VC++もgdbもステップ実行に見せかけてるだけ。 インタプリンタじゃあるまいし。
夏だな。
これが夏厨認定厨?
>>417 タイムアウト時間無しのselectに書けるというのはどうか?
>>422 取りあえず
>>421 みたいになんでも夏と言えば解決すると思ってる方がにわかに急増するのも夏ならではですね。
>>414 どこかで聞いたような…
ステップ実行できない環境でも、不便に思ったことはないな。 作り方にもよるんだろうけど。
414とお前がデバッガを使いこなせていないことは関係ない
そこで、TRONですよ。
>>426 使いこなせていない… そうだな。 ここで愚痴ることではなかった。 すまんね。
sleep() ってそんなに負荷かかるんですか?
433 :
デフォルトの名無しさん :04/07/26 08:26
眠るのになんで負荷がかかるのよ
for(;;) sleep(0)したらヘビーループになるな
>>434 for(;;);
と
for(;;)sleep(0);
とはかなり意味が違う
むしろ、sleep(0)を書く方が分裂症。
実装によるかも知れんが取りあえずソース読んでからものを言えと。
>>436
ソース公開されたOSばかりじゃない
夏だな
>>440 で、解決しようとする奴が大量に沸くのも夏ならではでし。
>>437 何が言いたいのかはわかる。そしてそれは実装に依存しないか?
それに、1アプリがそこまで見込んで、やるべき処理なのかが疑問。
>>442 少なくともOSに制御は帰る・・・のか?
>>437 そこまでするとなると、もはや制御系のコーディングだ。
>>445 制御系であんな高級なスケジューラを使わせてもらえる事なんて希です。
>>445 リアルタイムOSって制御系的な分類で良いんでしょうか?
どうしてそんなに分類したがるのだろう
>>447 制御系ではリアルタイム性が必要なことが多いつーだけでしょ。
ちなみにリアルタイム性というのは、
ある事象に対して一定時間内に反応できることが保証される
みたいなこと。
ゲーム系
>>450 ハードリアルタイムはそう言う位置づけですね。
ソフトリアルタイムは似非リアルタイム
ソフトリアルタイム=クロックカウント派 似非リアルタイム=まあこんなもんやろ派
クロック数を数えたりして実行速度を上げることはリアルタイム性とは関係ない。 450が言うように、一定時間内に反応できることが「保証される」ということが重要。 一定時間がどれくらいかというのは用途によって異なる。
>>455 ものすごく多いプロセスを生成、実行しても保証されるわけ?
そういうことが可能なんですか?
>>457 実行形の資源が有限である以上そんなこと不可能なの常識で分かるでしょう。
それを一定の精度で保証するスケジューラを持ってるOSを リアルタイムOSってゆーんじゃ?
>>458 では、そのリアルタイムOSのスペックには
最大同時生成プロセス数〜個とか書かれているのでしょうか?
動いてるプロセスすべてがリアルタイムなスケジューリングを必要とするわけじゃないでしょ。
>>461 いや、リアルタイムなOSみたこと無いんよ。
だからちょっと疑問に思ったわけですよ。
でも本当のところ内部はどうなってるんでしょうか?
リアルタイム+スケジューラでググっと。
>>464 ほう、なるほど。
ざっと見てみたが、うーむ、どうやって保証してるのでしょうか?
それとも、リアルタイムOSを使用する方は、
ある機器上でリアルタイムOSを動かし、計測しながら、
アプリを設計、作成していく物なんでしょうか?よくわからんが。
>>466 最終的にはそらそうでしょう。ユーザアプリの応答性なんぞ保証できん。
全部保証するわけじゃないわな。 特定のカーネルスレッドだけ保証したりする訳よ。 後はそのオコボレのCPU使うわけ。
>>466 ユーザプロセスに対するリアルタイム性の「保証」って言うのは、例えば
・少なくとも 18msec 毎にプロセスにCPUが割り当てられる
・CPUが割り当てられた場合には、少なくとも5msecはCPU時間を消費することができる
という風にスケジューリングが厳密に行われる、ということです。
んで開発者はそれらの情報+ハードウェアのスペックに基づいて、
時間内に実行可能なアルゴリズムを選択してプログラムを書く。
ビデオ再生なら「720x480x30fpsはOKだ。でもAAC音声のデコードは無理なのでAC3にしよう」とか。
471 :
デフォルトの名無しさん :04/07/27 13:27
なんか全然ありがたくないな
どういうのがありがたいんだろう。。
>>470 詳しい説明、ありがとうございます。
相当わかってきました。
ハードリアルタイムというのは存在しえないと、 申しているところあるようですが。 そうするとハードリアルタイムといってる達は、 誇大宣伝をうたってるという事ですか?
極論するとリアルタイム処理なんて存在しないことになる。 極論馬鹿はどこにでもいるからこればかりはどうしようもない。
477 :
デフォルトの名無しさん :04/07/30 09:21
システム依存の定数で _SOMECOSTANT __SOMECONSTANT _SOMECONSTANT_ __SOMECONSTANT__ とか色々と異なるスタイルのものがありますが、 これらに何か意味があるのでしょうか?
>>479 ということは、_がたくさん付いている変数ほど、新しく定義された変数ということでしょうか?
_がたくさん付いている変数ほど実際にプログラムから参照される頻度が高いということですか?
いや、違いますね。なんか妄想が先走ってヘンなことを書き込んでしまいますた。 もう来ません。
>>478 お前は頭に_, __をつけるな。
言いたいことはそれだけだ。
なんかスルーされている。気になってしょうがないんだけど。
>>484 ああなんだ、ここの住人が申しているということじゃないのか。
486 :
デフォルトの名無しさん :04/08/04 14:25
シェルとシェルスクリプトについて 体系的に説明しているサイトおしえてクレクレーヌ
man bash
やだやだー テキストのみがいいの〜 じゃないと嫌なの〜
でもほんとはトップが目次形式になってるほうがいいのぉ〜
それくらい自分で作れ。
わがままだな(w
redhat7.3+g++3.4.0でプログラムを書いているのですが こいつをdaemonプロセスにしないといけないんです。 forkを使えば処理は行えるのですが 終了処理を外部コマンドから 入力して正常終了するようにしたいです。 killコマンドとかじゃなく・・・ どのようにすればいいのですか? ぐぐってもぜんぜん情報にありつけず困ってます。 よろしくおねがいします。
SIGTERMのハンドラ置き換えて,PIDファイル作る。 外部コマンドは kill -TERM `cat pidfile` のシェルスクリプトで十分。
>>501 むやみに複雑にするメリットはないだろ?
それにdaemonプロセスを終了させるのは1番普通のやりかた。
まちがった。 それにシグナルでdaemonプロセスを終了させるのは1番普通のやりかた。
>>503 クラスとかがりがり使ってるんですが
それだとデストラクタとかも普通に動いてくれるのですか?
シグナル検地するとグローバルの関数への指定しかできないため
うまく終了処理にいけないとおもうのですが・・・
クラスにstaticなメンバーつくって終了処理をっていうことが
できればいいんですが・・・
>>504 普通はシグナルハンドラでは、
(フラグを立てるなりして)メインのアプリケーションロジックに
対して終了依頼があったことを通知するだけ。
そっから先は喪前様のプログラムがちゃんと外部からのイベントを
契機として終了可能にできているかどうか次第。
そもそも、シグナルを受け取ることと異常終了することは別ですよ...。
>>506 意味がわかりにくひ・・・きっと「異常」ってのは編集ミスで残ったに違いない!
シグナル受けとったら否応無しにアボートさせられると思ってるのかとおもたのです。 killコマンドじゃなくとか、デストラクタがとかゆってはるから。
なるほど。漏れは、 ・シグナルで終了依頼を受けること ・きちんと終了すること この2つは別のことだよ、って言ってたのかと思った。
FIFO でもつかっとけ。
シグナルハンドラが走った時点でlongjumpが入るから、ローカル変数のデストラクタなんて走る機会がないと思った。
え”?
わけわかめ
やっぱりWincowsの方が20年新しいだけあって、 色んな概念が分り易いよな。
>>514 牛たちに勝利せよ!21世紀らしい斬新なOS名だな。
勝ち組の雌牛って感じかな
>>511 > シグナルハンドラが走った時点でlongjumpが入るから、
そりゃお前のプログラムの問題だろ。
>>517 よくわかってないですがメッセージキューみたいにシグナルハンドラの実行を任意の時点まで遅延できるんですか?
>>518 sigsetmaskとか
シグナルハンドラにごちゃごちゃ書くのは感心しないが。
ハンドラはキューにメッセージ乗せるだけ、という使い方が安全かなあ あ、キューの排他が要るね・・・
>>520 メイン処理でキューの排他中にシグナルハンドラが走ったら困りませんか?
待ってても処理はシグナルハンドラに移ってるからいつまでも解放されることがないわけで。
キューへの処理がアトミックなら問題ないんですけどね。
>>521 NIX関係ないプログラミング初級の話なんだが、
メイン処理のキューの排他を、
signalのブロックで囲めばいい。
メンスレッドがI/O扱う類いのものなら、
>>510 も検討せよ。
523 :
デフォルトの名無しさん :04/08/07 14:20
age
排他が必要ってことは、シグナルハンドラは別スレッド(?)で動いてる ようなものってことですか? マンドクセ。
別スレッドっていうか、シグナルは割り込みだよ。
signalは標準C関数
標準?
ANSI Cの規格にありますよ。
シグナルがよくわかってない
>>499 が作っているものは
実行環境がLinuxでC++でマルチスレッドを使っているんだ。
その上シグナルを入れたら、不思議な踊りを踊り出すぞ。
>>499 はリチャードの本を一度読んでからやった方がいいってこった。
killっていう名前は明らかに命名ミスだよな。
汎用シグナル送信コマンドなのに、killなんていう過激な単語を割り当ててしまったせいで
>>499 のような初心者がこのコマンドを悪魔のように感じてしまう。
責任者でてこーい!
UNIXバッドノウハウコンテストの人気投票で何位ぐらいかな<kill
>>530 大昔はプロセスを止めることしか出来なかったので、
理にかなった命名なのです。
creat(2)と同じで、伝統のある名前なのです。
しかし…いくら互換性といっても物には限度があるよなあ。
UNIX関係者にに命名センスを求めるのが間違い
man co とかやってヨダレたらしてるおまいらが言うなよwww
>>530 悪魔のように感じるぐらいで丁度いいんだよ。
それが汎用シグナル送信コマンドであることを理解しないうちは、「デーモン」なんか書いてはいけないということだ。
>>534 daemon=悪魔とか言ってる奴も然り。
daemon load
ドラえもん
>>533 というか、シンボルなんて他と違うことだけに意味を持つっていう
原則に拘るべきだな。UNIXみたいな30年も互換性を維持してきた
システムならなおさら。物事を抽象的に眺められる視点が得られるなら
ものの名前なんてどうでもいいと思うね。もちろん分り易い名前が
ついてるに越したことはないけど、そこばかりに目が逝ってしまう
ようじゃダメだろう。
kill -KILL /bin/kill
541 :
デフォルトの名無しさん :04/08/09 17:28
543 :
デフォルトの名無しさん :04/08/09 18:39
物事を抽象的に眺められる視点が得られるなら ものの名前なんてどうでもいいと思うね。
ああ、そっちの人ですか。まあ好きに何でも反論してください。
アプリとシステムは名前で結ばれてるわけじゃないんで、さっさと変えればいいのに。
>>545 そのうちシステムとユーザーひっくるめてWindowsにリプレースされます。
で、プログラマは取り残されると 〆(。。)
>>543 物事を抽象的に表現するには適切な名前付けが不可欠だと思われ。
お前の各プログラムの基底クラスにmankoとか付けるのいい加減やめてくれ。
549 :
デフォルトの名無しさん :04/08/09 23:03
manko
KillEx()
シグナル受信専用スレッドを用意して、そこから終了イベントをうければいいじゃない
553 :
デフォルトの名無しさん :04/08/11 05:37
age
>>552 そんな窓みたいな手法はいや。
でも、WaitForMultipleObjectsみたいなのがときどき欲しくなるなあ。
え、シグナル受けるスレッド1個だけに限定するのは普通でしょ?
556 :
デフォルトの名無しさん :04/08/11 15:07
>>557 ん?今からwebサイトでっち上げて好き勝手な論理を正当化しても良いんだが。
559 :
デフォルトの名無しさん :04/08/13 12:27
Bシェルのコーディング規約が乗っているHPなんか、ないでしょうか?
スタイルを統一しないと破綻するような巨大なスクリプトなんて書くなよ スクリプトのコーディングなんてテキトーでいいんだよ
>>560 そうですよね、普通規約なんか設けませんよね。
ありがとうございます。
バッチの質問スレで聞いて、それでも同じような回答ならあきらめます。
MSにはBATファイルのコーディング規約がある
AT&TのUSGには規約あったんじゃないかな? 奴等大量のscriptを書いてたからな。
linuxのってないの? そこからbashismを除けばいい感じでは?
linuxのってないの? そこからbashismを除けばいい感じでは?
なんで二回書くの? なんで二回書くの?
>>558 一個人の戯言よりはHPの中の人の言ってることのほうが
いかにも信用できそうだろ
568 :
デフォルトの名無しさん :04/08/16 06:26
age
569 :
デフォルトの名無しさん :04/08/16 17:40
/usr/bin/htpasswd / test 上記のコマンドを実行したときに、自動的に決まっているパスワード(test123等)も入力されるスクリプトって作れますか?
スレ違わなくない?
板違い
572 :
デフォルトの名無しさん :04/08/16 17:47
なんだってー!?
>>569 passwd << EOF
omaemona
omaemona
EOF
で何とかならないっすか?もっと高度なことをしたかったらexpectだっけ?
574 :
デフォルトの名無しさん :04/08/19 17:10
禿しくガイシュツな質問だと思いますけど、 unix環境で最も簡単にグラフィックを表示するにはどうすればよろしいのでしょうか? グラフィック領域の任意の場所に(小さな)bmp画像などを表示する方法が分かりません。 よろしくお願いします。
グラフィック領域って何? 独立したプログラムでいいの? それともプログラムの一部にするの? それはどんなプログラム?
576 :
デフォルトの名無しさん :04/08/19 18:18
>>575 ウィンドウの中に適当に設定したグラフィック領域です。
プログラムの一部として使いたいのです。
ゲームプログラムで、特定のキャラクターを表示させたりしたいのですが、
グラフィック部分が禿しく難しくて挫折しています。
アルゴリズム部分はどうにでもなるのですが、表示だけが出来ません。
出来れば表示よりもアルゴリズム本体に手間をかけたいので、
最も簡単にグラフィックを表示する方法が知りたいのです。
よろしくお願いしますm(_ _)m
>>576 最も簡単ではないかもしれないけど、そこそこ簡単で、たぶん
>>574 の使ってる
プラットフォームにも存在して、かつ知っておいて将来役に立つかもしれないものとして
OpenGL を勧める。
「最も」簡単なものは世界中の全てのライブラリを知っている誰かが教えてくれるだろう。
もうちょっと開発環境詳しく書いたら。 LinuxでGNOMEでC++でゲーム作りたいとか。 ポータブルにハイパフォーマンスに描きたいならOpenGLじゃないの。
一応Javaという選択肢もあるが。 bmpはいまいち簡単じゃないけど。
580 :
デフォルトの名無しさん :04/08/19 19:12
>>577 OpenGLなら使えますが、bmpなどを表示するのが激しく難しそうです。
Window全体ではなくて、任意の場所となると。
>>578 まさにその環境です!C++ではなくてCですけど。
>>579 Javaでぐぐってみても、今ひとつ簡単な方法がなかったみたいです。
Javaでもいいのですが、欲を言うとCで作ったプログラムと
協力するプログラムにしたいです。
>>580 gnome 使ってるっていうことなら、gtk+ の drawable あたりのサンプル
プログラムでものぞいてみたらどうよ?
>>580 xbubbleとかのsourceでも参考にしたら?
↑結構綺麗なコード。
bmpうんぬんはimlib使えば? libgdk-imlibとかさ。
SDL つかって SDL_LoadBMP(), SDL_BlitSurface(), SDL_UpdateRect()
わしもゲームならSDLがいいと思う。 bmp以外も使うならSDL_imageを使えばいいし。
>>581 そうしてみます。
・・・やっぱり、グラフィックを使おうとすると、ある程度手間はかかるんですね・・・。
>>582 xbubbleが入っていたら使ってみます(自分でインストールする権限がないので)。
>>583 SDLは入ってなかったみたいです・・・。
>>584 SDLって(ぐぐったら)結構便利そうでした。
でも使えない○| ̄|_
「権限が無い」って、 root の権限が無いんじゃなくて、 「勝手に他所のソフトをコンパイルしちゃいけません」ってこと? SDL なら ./configure --prefix=$HOME/local とかすれば 自分の権限で入れられるはずだけど。
587 :
デフォルトの名無しさん :04/08/20 00:05
>>586 makeとかinstallを使う権限がないのでは。
588 :
デフォルトの名無しさん :04/08/20 00:13
>>586 >「権限が無い」って、 root の権限が無いんじゃなくて、
>「勝手に他所のソフトをコンパイルしちゃいけません」ってこと?
ルートの権限です。
>SDL なら ./configure --prefix=$HOME/local とかすれば
>自分の権限で入れられるはずだけど。
展開したときのサイズは大きくないですか?
100メガもあったら少しきついてす(一人に割り当てられているハードディスク容量はそんなに大きくないので)。
SDLだけならライブラリとヘッダで1Mbyteない。 ただ下請ライブラリがあれこれ必要。 gnome環境らしいからライブラリほとんどはあると思うけど、 ヘッダは微妙。
ソースは展開すると 10Mbyte 程。
591 :
デフォルトの名無しさん :04/08/20 00:25
考えてみると、ホームディレクトリにインストールすると、 #include <〜.h> と書いたときにインクルードされないような気が・・・ そこは、 #include "/usr/・・・/〜.h" とか書き直すしかないんでしょうか?
592 :
デフォルトの名無しさん :04/08/20 00:26
>>591 gccなら-Iオプションでも使えばいい。
-Lも忘れるな。
ふつうはインストール時に入る sdl-config を使う。 CFLAGS = -Wall -g -O2 `$HOME/local/bin/sdl-config --cflags` LDLIBS = `$HOME/local/bin/sdl-config --libs`
595 :
デフォルトの名無しさん :04/08/20 00:44
ふつうはLIBS
共用計算機つかってる学生さんだろうか
今どうやってウィンドウを出してるか(Xlib叩いてるのかGTKかQtかtkか)や パフォーマンスどのくらい必要かとかにもよるんじゃなかろうか。 Kylixとかなら一行もコード書かなくてもbmpぐらい表示できそうだとか。
598 :
デフォルトの名無しさん :04/08/20 23:09
ようは、bmpデコードライブラリなんだよ。 これさえあれば、あとは何でもいけるだろ。
bmpもろくに表示できないUNIX
Xか入ってなくて/dev/fb*もないとか
>>599 >ようは、bmpデコードライブラリなんだよ。
鼻くそほじりながら書けよ。
デコードもへったくれもそのままビットマップが詰まってる。
RLE圧縮されてるとか。 あんまし見た事無いけど。
昔ランレングス圧縮されてる一色(赤)のBMPを添付された記憶が 展開したら500Mになりやがった
コンソールモードでbmpって表示できるの?
609 :
デフォルトの名無しさん :04/08/22 02:04
そういえばKNOPPIXの起動中にペンギンが表示されるが、あれがそうか?
それとは違う気がする
>>609 あれはfb。
/usr/src/linux-*/drivers/video/logo/Kconfig
config LOGO
bool "Bootup logo"
depends on FB || SGI_NEWPORT_CONSOLE
613 :
デフォルトの名無しさん :04/08/24 15:55
C++ で、指定された unix コマンドが実行できるか(存在するか)を調べたいです。 which target_cmd のステータスを取ろうかなと思うのですが、 popen("which target_cmd > /dev/null 2>&1", "w"); だと、which 自体は当然正常に実行できるのでうまくいきません。 どうすればよいのやら? それとも他によい方法があるでしょうか?
615 :
◆Z0vd5w812U :04/08/24 16:18
>>613 環境変数PATHを分解してUNIXコマンドをstrcatしてfstat。
accessだけをしらべるとディレクトリもX_OKにならないか? 流れ的にはこんな感じになるのかな? getenv("PATH") strtok(path, ":") opendir readdirで片っ端から調べる。 探しているなまえがあればstat S_ISREGで調べて、access又はstatのパーミッションを調べる。 whichと同じにしたいなら見つかれば戻る。 見つからなければstrtok(NULL, ":")で最初から…。
>>613 一つだけきいていい?
なんで第二引数を"w"にしてるの?"r"じゃなくて。
619 :
◆Z0vd5w812U :04/08/24 18:24
>>617 opendirしなくても、ディレクトリパスに目的のコマンドをstrcatして
fstatかaccessでファイルの存在や実行可能状態を調べればよいよ。
>>613 system("which target_cmd > /dev/null 2>&1") で戻り値見ればいいと思うが...。
>>620 それだと存在するかどうかはわかるけど、実行できるかどうかはわからない。
じゃあ"bash -c 'type target_cmd'"で。
PATHのサーチも期待してるんでしょ
>>621 はぁ ?
which は、実効属性ぐらいは当然見てるんだが。
まさか、ファイルの中身まで見ろとか言ってるんじゃないよな。
s/実効/実行/
626 :
デフォルトの名無しさん :04/08/26 02:39
>>624 /home/toru # touch /sbin/ahoka.txt
/home/toru # chmod 666 /sbin/ahoka.txt
/home/toru # which ahoka.txt
/sbin/ahoka.txt
/home/toru #
$ sudo mkdir /usr/local/bin/ahodaro.d $ which ahodaro.d $ echo $? 1 $ sudo touch /usr/local/bin/ahodaro.txt $ which ahodaro.txt $ echo $? 1 $ which test /usr/bin/test $ echo $? 0 $ sudo rm -rf /usr/local/bin/ahodaro.*
629 :
デフォルトの名無しさん :04/08/28 14:16
age
630 :
デフォルトの名無しさん :04/08/31 13:53
age
631 :
デフォルトの名無しさん :04/09/03 03:00
悩んでるんで教えて下さい。 ファイルをopenしてfstat()で検査してエラーだった場合、 そのファイルディスクリプターをcloseすべきでしょうか?
すべき
やっぱりそうですよね。すっきりしました。
ずいぶん簡単に納得するんですね
普通だろ。自分の予想と逆のことを言われた場合はともかく。
もしopenされてなかったらcloseしたらおかしくなっちゃうかもよ
openがくれたfdは信用するなってこと?それは困るなあ
>fstat()で検査してエラーだった場合 例えばどんな?
closeにfstatの値によっては呼ばなくていい なんて書いてないんだからcloseしろ
もうめんどうくさいから exit でいいよ。
ファイルディスクリプタとファイルポインタの違いってナニ? なんで二つあるの?
UNIXのシステムコールで使うのがファイルディスクリプタ. ファイルポインタはCの入出力ライブラリ.
ファイルディスクリプタに対応したFILE構造体を作成できるのに、 なんでディスクリプタなんていうものがあるの?
shell をつくりたいのですが何から勉強したらいいですか?
>>644 fdに対応したFILEを作成する関数ってナニ?どんな場合に失敗するの?
>>645 fork(2), execve(2)
wait3(2), exit(3)
を使って引数を実行するプログラムを。
$ ./a.out ls -l
で、ls -lを実行するプログラム。
open(2), close(2)
を使ってredirectを実現。
pipe(2), dup2(2)
を使ってpipeを実現。
>>646 fdopen(3)
逆に FILE * -> file descripor なら fileno(3)
詳細はman参照。
651 :
デフォルトの名無しさん :04/09/04 14:52
おすすめはfopen->filenoの順
リダイレクトをやるならdup(2)も勉強しておきたいところだ。
>>651 filenoした後って、始末どうすんの?
fclose呼ぶの?
普通はそうだろ。
655 :
デフォルトの名無しさん :04/09/05 23:10
656 :
デフォルトの名無しさん :04/09/08 09:59
UNIXプログラミング始める前に、スティーブンス丸暗記が基本ですか?
暗記より、説明読みながらサンプルプログラムを走らせたり改造したりするのが基本かと。 あのヘッダを自分の環境に合わせて直すだけでも貴重な経験になるはず。
658 :
デフォルトの名無しさん :04/09/08 23:10
close(1)として標準出力を一旦閉じた後、再び開き直すにはどうしたら いいですか? 苦し紛れにstdout = fopen(ttyname(1), "w"); とかしてみたんですけど、printf()系は復活しましたがcoutは閉じたまま でした。
659 :
デフォルトの名無しさん :04/09/08 23:16
C言語で, プラグインのようなものをつくりたいのですが可能なんでしょうか?
もちろんだ
661 :
デフォルトの名無しさん :04/09/08 23:21
どうやればいいんでしょ;;
662 :
デフォルトの名無しさん :04/09/08 23:24
>>661 どうって、決まりに沿って書くだけだが。
>>662 その決まりがわからないのですが,
その決まりはどこを見たらわかるのか教えていただけませぬか?
665 :
デフォルトの名無しさん :04/09/08 23:32
>>663 プラグインを作りたいソフトの資料はないの?
>>663 すんません. 言葉の使い方間違ってたようで.
プラグインの呼び出し側をつくりたいのです.
668 :
デフォルトの名無しさん :04/09/08 23:38
669 :
デフォルトの名無しさん :04/09/08 23:48
>> 664 こんな感じですか?↓ string tty = ttyname(1); fclose(stdout); dup2(1, open(tty.c_str(), O_WRONLY)); 駄目でした...
>>667 すんません...
ソフトをリコンパイルすることなく,
入力ファイルに書いてある関数を呼び出したい.
その時, そのソフトで定義していない関数も呼び出せるようにしたい.
... で伝わりますでしょうか.
671 :
デフォルトの名無しさん :04/09/08 23:50
672 :
デフォルトの名無しさん :04/09/08 23:52
他のプログラムのサブルーチンを実行したいって言ってるのか?
プラグイン作りたい奴はCOMの勉強をするとよいよ
>>672 みました.
>>673 どうやったらできますか?
>>674 はい.
いくつかキーワードでてきたので自分で調べなおしてみます.
ありがとうございました.
プラグインなんて言うからこんな事になるんだ
>>658 stdoutやcoutとして使っているものを、close(1)しちゃいかん!
680 :
428ツ?ツ? :04/09/09 00:24
>> 671 下のようにしてみました。 int fd = dup(1); cout << "show (before close)" << endl; close(1); cout << "not shown" << endl; dup2(fd, 1); cout << "show (cout)" << endl; printf("show (printf)\n"); 結果は show (before close) show (printf) coutが復活してない模様です...
>>680 > coutが復活してない模様です...
それは、きっと、
> cout << "not shown" << endl;
のせいだよ。コメントアウトしろ。
しかし、動いても実装依存で、close(1)しちゃいかん!
ageちゃった… それからclose(1)する前にflushくらいしろよ。 しかし、close(1)しちゃいかん!
何故closeしたがってるんだろうな
684 :
デフォルトの名無しさん :04/09/09 00:30
どうせまた開くのにな
すみません。 cursesを使ったプログラムをX Window上のktermとかで動かしたいのですが、 端末の行カラム(ウィンドウサイズ)が動的にされたタイミングを捕まえることは できるでしょうか? それに合わせて表示を変更できたらなぁ、と思ってます。 その方法を教えてくださいませ。お願いします。
SIGWINCH
>>685 なるほど、そういうシグナルが来るわけですな。
ためしてみます。サンキュー
689 :
デフォルトの名無しさん :04/09/09 01:10
>> 683 やりたいのはpipe(2)+fork(2)を使って 親の出力 → パイプ → 子の入力 と繋ぎ、しかる後に子が先に死ぬんで 親の出力 → 画面 と戻したいのです dup2(パイプの片方, 1); とやる過程で中でclose(1)されてるので、それを復活させたいと いうのが発端です。
親の使うファイルハンドルが標準出力である必然性は何なんでしょう?
691 :
デフォルトの名無しさん :04/09/09 01:42
>> 690 親が叩くとあるライブラリが、デバッグログ相当のものを標準出力 に吐いています。そのライブラリは非公開です
子が死なずに stdout に吐き出すようにすればいいのでは。
693 :
デフォルトの名無しさん :04/09/09 02:46
>> 692 1.子は標準入力の捕捉と共有メモリへの書き出しのみを担当させたい 2.子はライブラリの使用箇所が終わり次第消したい 3.親のみが知りえる情報とログを加工してmainの最後に出力したい という理由で子が吐くというのはやりたくないです
やれ P.S. 実装依存のコードでも良ければ、環境を書け。
Vine Linux 2.6 & g++2.95.3もしくは Cygwin 1.5.9 & g++ 3.3.1 です
cout を使わなければいいじゃん。
>> 681 あ、ほんとだ!! でもなぜ?
closeされてんのにI/Oしたら、 cout.fail() => trueになるに決ってんでしょ。 cout.clear()してみなよ。 つーか実装依存のコード書くのはまだ早いかも… もっとiostream勉強しる
>> 699 仰せの通りfail()がtrue返し、clear()したら表示されるようになりました failなんてフラグを持ってる事すら知りませんでした 勉強になりました
701 :
デフォルトの名無しさん :04/09/10 02:26
X-WindowでMDI形式のアプリって組めますか?
できます.
703 :
デフォルトの名無しさん :04/09/11 01:00:41
>>702 じゃあなんでGIMPはMDIじゃないの?
賢いwindow managerがあれば、MDIは欠点の方が大きい。
舞黒ソフトですらSDIを推奨してるのにな
えっ 真っ黒ソフトってSDIを推奨してんの? 知らなかった。どうでもいいけど。
Windowsでは、CreateFileMapping,MapViewOfFileと 二つの関数をつかってマップするところが、 UNIXではmmap関数一回で済んでしまいます。 これはどうしてなんでしょうか?
モスバーガーへ行って、ビックマックセットが 無いじゃないかと叫んでる893だな
712 :
デフォルトの名無しさん :04/09/12 14:30:40
複数のプロセスで同一のファイルに対するマップを作るとき、 ProcessA : CreateFileMapping("hoge") → MapViewOfFile ProcessB : OpenFileMapping("hoge") → MapViewOfFile とすることで(msyncを呼ばなくても)、内容が同期される。 つまり、共有メモリのように振舞う。 というか、win32では共有メモリはこの方法を使う。 いわゆるmmapだけでこれを実現することはできない。 ・・・と思う(違ったら指摘してくだせえ) 同期が不要であれば、プロセスごとにCreateFileMappingを行えばよい。 これはmmapと同等となる。
open
>>713 > いわゆるmmapだけでこれを実現することはできない。
> ・・・と思う(違ったら指摘してくだせえ)
見事に間違ってる。MAP_SHAREDつけるだけでいい。
> 複数のプロセスで同一のファイルに対するマップを作るとき、
> ProcessA : CreateFileMapping("hoge") → MapViewOfFile
> ProcessB : OpenFileMapping("hoge") → MapViewOfFile
プロセスによって手順が違うのかいな。めんどくさ。
マップという概念について勉強する気になった。おまえらありがとう。
>>715 > 見事に間違ってる。MAP_SHAREDつけるだけでいい。
ダウト!
2つのプロセスで試してみ。mmapだけじゃできんから。
msync
つーか、意外にmmapの挙動は知られてないんだな。 > とすることで(msyncを呼ばなくても)、内容が同期される。 へえー
そもそも Create/OpenFileMappng + MapViewOfFile の挙動を知らないから、 mmap だけで同じことができるかどうかわからんな。
知らないなら黙っていればいいのにねぇ
>>717 試してみたら、ちゃんとmmapだけで同期したんですけど。
OSの実装を考えたら同一メモリページを複数のプロセスにマップするだけなんだから、
同期しない理由がないと思うけど。
MAP_SHAREDはmappingの共有で、 msync(2)はflushだから、MAP_PRIVATEの時しか意味ないだろ。
The Design and Implementation of the 4.4BSD Operating System p.141 マルチプロセッサ環境なら CPU のキャッシュの関係で msync が必要になるかもね、ということ。
726 :
デフォルトの名無しさん :04/09/13 00:55:27
うちのマニュアルにはファイルが更新されるのはmsyncを呼んだときだと書いてあるが、 その領域自体は複数のプロセスで共有すると書いてあるな。
ファイルをマップしたとき、 メモリにマップされてる領域自体は共有されてるから、 プロセスが別だろうとなんだろうとその場で変更が見える。 でもそれは元ファイルには書き出されてないかもしれないから、 元ファイルの内容を更新するにはmsyncが必要。 みたいな。
>>726 > うちのマニュアルには
釣りでないなら、uname -aくらい書けよ。
>>727 > ファイルをマップしたとき、
> メモリにマップされてる領域自体は共有されてるから、
mmapのman pageをそのように記述しているOSがあるなら教えてほしい。
730 :
デフォルトの名無しさん :04/09/13 01:33:57
誤訳っぽいな。
>>730 > MAP_SHARED このマッピングを、このオブジェクトをマップした
> 他の全てのプロセスと共有する。
mappingを共有するんだから、メモリ空間も共有だわな。
> この領域への保存
> は、ファイルへの書き込みと等価である。
単一仮想記憶だからmmap(2)すれば当たり前だわな。
> ただし
> ファイルが実際に更新されるのは、 msync(2) また
> は munmap(2) が呼ばれたときである。
これはプロセス間のメモリ共有とは何の関係もないわな。
diskにflushしようがしまいが、共有メモリは共有メモリだからね。
それを理解してない。
733 :
デフォルトの名無しさん :04/09/13 01:48:51
734 :
デフォルトの名無しさん :04/09/13 02:38:10
なにかオブジェクトをつくったとき、ハンドルの概念でそのオブジェクトをあらわすものを 取得するようにプログラム書いてる方います? そうれってなんのメリットがあるんでしょうか? typedef { void *ptr int attribute1; int attribute2; }HANDLE HANDLE CreateObjFoo() { ObjFoo *foo_prt; foo_ptr=(Obj_Foo *)malloc(sizeof(ObjFoo)); HANDLE hnd; hnd.ptr=foo_ptr; hnd.attribute1=attribute1; hnd.attribute2=attribute2; return hnd; }
1)CPUCache
2)物理メモリ
3)DISK
msyncは1から2への更新のついでに、同期で2から3へも行うという理解でいいのかな
MAP_SHAREDしたときは、1から2への更新が重要というだけで
>>732 >単一仮想記憶だからmmap(2)すれば当たり前だわな。
単一仮想記憶ってなんでしょうか?
>>734 具体的なコードを出してくれないと。そんなあやふやなのではねー。
適当な事をいうと、そういう類のことしてるのは
リファレンスカウントなりGCなりのメモリ管理が絡んでいる場合が多いと思う。
あと複数の種類のオブジェクトを同じHANDLEで扱いたい場合。
>>735 > 1)CPUCache
> 2)物理メモリ
> 3)DISK
>
> msyncは1から2への更新のついでに、同期で2から3へも行うという理解でいいのかな
> MAP_SHAREDしたときは、1から2への更新が重要というだけで
少なくともSMPやccNUMAじゃ1と2の間の一貫性もアーキテクチャで保証されるん
だけどね。そうじゃないNUMAでOSの側でも手を打たないUNIXってどれですかね。
第一それが問題になるなら話はmmapに限らないし。
2から3もOSがいきなり落ちたりしない限り、ユーザから見れば即時にディスク
に書き込まれるのと変わらない。
書き出しはOSがページングと同じ枠組みで自動的にやってくれる。
>>730 のマニュアルの訳者はそれを理解してないね。原文はもっとましな書き方
がしてある。
>第一それが問題になるなら話はmmapに限らないし。 よく考えてみればそうですね。 異なるCPUで動いてるスレッドのデータ領域の話だってそうか。 全然関係ない話になるけど、 >SMPやccNUMAじゃ1と2の間の一貫性もアーキテクチャで保証される 保証されてないアーキテクチャってあるんでしょうか。ソフト側で Cacheのフラッシュを実行しないといけないようなCPU。
>>725 のような書き込みを見て、OS側でCPUCache->メモリ間の転送を
制御しなくてはならないようなアーキテクチャがあるのかと思ったまでです。
むかしなんかで読んだMachのメモリマネージャの記事で、個々のCPUごとに、
専用のメモリとアドレス空間を持っているハードに対応するような話を読みました。
現在のNUMAのように単一のアドレス空間の共有を前提とするのが当たり前の
時代からみると、かなりキモイ設計のようにも見えますが。CPU間の
データ転送には特別な命令を用いる感じなんでしょうか。よく分りませんが。
VMにその頃の名残があって、
>>725 の記述がそれを繁栄したものだというのなら理解できます。
>>740 その本、なんだか良さそうな感じですね。
今度注文してみます。
>>741 むしろ同期しない方のコードを晒してもらいたい。
>>734 それUNIX固有の話じゃないんじゃないの?
FILEに付いて考えてみれ
このプログラムのどこが間違っているんでしょうか。Bus Errorが発生します。 #include<sys/types.h> #include<stdio.h> #include<sys/mman.h> #include<unistd.h> #include<sys/stat.h> #include<fcntl.h> #include<wait.h> int main() { int fd, pid; void * p_map; fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_SYNC); pid = fork(); if(pid==0){ /*child*/ p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); printf("child p_map == %d\n",(int)p_map); //memcpy(p_map,"aaaa",4); *(int *)p_map=4; } else if (pid>0){ /*parent*/ p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); printf("parent p_map == %d\n",(int)p_map); wait(NULL); printf("mmap %d\n",*(int *)p_map); } close(fd); }
どこで発生したか、backtraceくらい出せよな。 どうせこういうことだろうという見当はつくが。
mmap が失敗しても処理を続けようとしているところ。
fork後の実行順序を決めてかかってるところもね。
そりはwaitしてんだから問題なかんべ。 むしろ終了直前にわざわざcloseしていることのほうが。
/tmp/mmap.txtが空だから。
>>749 親プロセスの最初のprintfが子プロセスでの書き込みより先に実行されることを
仮定しちゃってると思うんだが、どうよ。
少し書き換えました。
>>750 さんのいう通り空のファイルでは駄目なようです。
mmapではファイルサイズ分しか読み書きできないようです。それとも何か
勘違いしてるのかもしれませんが。あと/tmp/mmap.txtのアクセスモード指定が抜けてました。
#include<sys/types.h>
#include<stdio.h>
#include<sys/mman.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<wait.h>
int main()
{
int fd, pid;
void * p_map;
fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_SYNC, S_IRWXU);
write(fd,"aaaaaa",6);
//lseek(fd,6,SEEK_SET);
pid = fork();
if(pid==0){ /*child*/
p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
printf("child p_map == 0x%X\n",(int)p_map);
*(int *)p_map=4;
}
else if (pid>0){ /*parent*/
p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
printf("parent p_map == 0x%X\n",(int)p_map);
wait(NULL);
printf("mmap %X\n",*(int *)p_map);
}
close(fd);
}
ところでこのプログラムでmmapを使ったプロセス姦通心ができているのかどうか。 判別できないとするなら、何が間違っているのでしょうか。 childプロセスが終了した時点で当然、mmap領域のダーティーなページの内容は 当然ディスクに書き戻されているはずですが、そのことがparentプロセスが そのページを参照することとはなんの関係もないですよね?
当然? File systemに反映させたかったらmsync(2)使え。 それからmmap(2)のonline documentをちゃんと読め。
>write(fd,"aaaaaa",6);
ここは
write(fd,"aaaaaa",1); /*OK*/
write(fd,"aaaaaa",0); /*Bus Error*/
となりました。mmapというよりはファイル操作に関する基本的な
事柄のようです。O_CREATを指定して開いただけでは、ディスクリプタ
だけが作成されて、VFS(?)に対する繁栄はされないということでしょうか。
また、実際に書き換えるmmap領域よりファイルサイズが小さいと、ファイルには
繁栄されませんでした。OSはLinux-2.6.8.1 glibc-2.3.3です。
>>754 ひとまずmsyncの話は保留にして、mmapでプロセス間通信ができないという
人がいたので、素人なりにそれができると示すためのコードを書いてみただけです。
コードが間違っていて、いるのかどうかを聞いています。
上のボログラムはmsyncは呼んでませんが、ファイルには繁栄されます。
嫁というのは分ってますので、みんなが納得できるコードを示してください。
>>754 お前こそちゃんと前のレスを読め。msyncなぞ使わんでも反映されるわ。
同期的に強制するにはmsync(2)が必要ですよ。 Linux-2.6.8.1でi386なら、MAP_AUTOGROWは実装されてないでしょ。 > 上のボログラムはmsyncは呼んでませんが、ファイルには繁栄されます。 参照しているprocessがなくなったら必ず反映されるわな。VMの仕事だもんな。
>>755 > mmapでプロセス間通信ができないという人がいたので、
馬鹿は無視しる
>また、実際に書き換えるmmap領域よりファイルサイズが小さいと、ファイルには
>繁栄されませんでした。
これは嘘でした。勘違いもいいところ。もう少し調べてから出なおしてきます。
>>757 それは逆に言えば
・ページのリファレンスカウントがゼロなったとき
・msyncが呼び出されたとき
以外はファイルシステムには繁栄されないということでしょいうか?
まあこれこそ嫁ってやつか。
>>755 > mmapでプロセス間通信ができないという人がいたので、
誰のこと?
>>757 だからmsyncなぞ普通はいりませんってば。mmapしてるプロセスの実行中に
別のプロセスがそのファイルをopen/readで読んでも、ちゃんとmmapページに書
かれた内容が読まれます。あんた試してものを言いなよ。
でもってファイルサイズを越えた領域に書かれたものがファイルに反映されない
のはmmapの仕様です。msyncがどうのこうのという話ではありません。
>>762 754=757さんは、ディスクに書き出されるタイミングを指摘しただけなので、
言ってることはあってると思います。私はmmapにつかっていたページの
参照カウントの増減があるたびにファイルに繁栄しているものだと思ってましたが、
実際はそうではなく、ページの参照カウントがゼロ、またはmsyncが呼び出されたとき、
または、何らかのバッファフラッシュ操作によるものというのが754氏の主張。
これは多分正しいでしょう。
正しくない。munmapしてもすぐに書き出されると限ったわけじゃない。 だって別にプロセスに結びつけられて管理されている資源じゃなくて、 OSがキャッシュと仮想記憶の一貫としてやってるわけだから。 ま、Linuxに限れば正しいのかも知れないが。 あなた、適当にそれっぽいことを鵜飲みにしないで、ちゃんと物事を 調べる癖つけた方がいいよ。
s/一貫/一環/ 失礼。
int main() { int fd, pid; void * p_map; fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_ASYNC, S_IRWXU); write(fd,"aaaaa",6); pid = fork(); if(pid==0){ /*child*/ p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); close(fd); printf("child p_map == 0x%X\n",(int)p_map); memcpy(p_map,"bbb",3); munmap(p_map,4); } else if (pid>0){ /*parent*/ p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); close(fd); printf("parent p_map == 0x%X\n",(int)p_map); wait(NULL); printf("mmap %s\n",p_map); sleep(30); /* ここでmmap.txtの内容を確認 */ munmap(p_map,4); unlink("/tmp/mmap.txt"); } }
>>768 sleepするところですばやく電源抜くとか
>>770 暇なんて試してみました。linux-2.4.28-pre3,glibc-2.3.3のマシンです。
ファイルはbbbaaという内容に更新されていました。このあたりはOSごとの
実装の違いが大きい話の気がしますので他の環境では当てになりません。
mmapのような複雑な機能を提供する関数の詳細まで調べるのはくどいんで
この話題終わりにします。みなさんどうも。
うはあ、生半可な知識の人が多いね。
mmapの挙動って正しく(?)はどうなの?
>>773 みたいなバカはほっといて真面目に議論したいところ
ええとじゃあ便乗して 同一ファイルを、別々にopenしてmmapした場合の挙動ってどうなんでしょ というか、fork()だと同一fdだから同期されて当然?
たぶん同じファイルのメモリ上のキャッシュは1つしかなくて、 mmapされるのはその同じメモリだろうから自動的に同期されて 見えそうな気がする。
>>775 どうもなりませんでした。
[プロセステーブル項目]->[ファイルテーブル]->[vノードテーブル]のうち
fork直後に頭二つの項目を共有しているかどうかはmmapには何の関係もないようです。
int main()
{
int fd, pid;
void * p_map;
fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_ASYNC, S_IRWXU);
write(fd,"aaaaa",6);close(fd);
pid = fork();
if(pid==0){ /*child*/
fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_ASYNC, S_IRWXU);
p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
printf("child p_map == 0x%X\n",(int)p_map);
memcpy(p_map,"bbb",3);
munmap(p_map,4);
}
else if (pid>0){ /*parent*/
fd = open("/tmp/mmap.txt",O_RDWR|O_CREAT|O_ASYNC, S_IRWXU);
p_map = mmap(NULL,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
printf("parent p_map == 0x%X\n",(int)p_map);
wait(NULL);
printf("mmap %s\n",p_map);
sleep(30); /* ここでファイル内容を確認 */
munmap(p_map,4);
unlink("/tmp/mmap.txt");
}
}
>>709 の話だけど、結局mmapのためにファイルのサイズを調整しなくては
ならないなら、WindowsのようにCreateFileMappingのような関数が
あったほうがスマートな感じがしませんか?
論理的なファイル(FS)、マッピング対象オブジェクト、実際のビュー
と三つの観点で綺麗に分けることができる。
逆にWindowsもCreateFileMappingの関数を通常のファイルの読み書きに対しても 適応すべきだったかと。その方が分りやすい。 論理的なファイルに対するハンドルで、いきなり読み書きするのは変。
>>780 スマートだと思うよ。
a)デバイスをシステムのメモリ空間に割り付ける
b)システムのメモリ空間をプロセスのメモリ空間からみえるようにする
a)とb)が明確に分かれていれば、
a)の結果の共有→b)した複数プロセスからの見え方の同期
が素直に理解できるし、
>>775 のような悩みを持たずにすむ。
abを一緒くたにしちゃってるのは変。
「システムのメモリ空間」って何なんだよ?
784 :
デフォルトの名無しさん :04/09/14 09:31:23
キチガイはスルーの方向で
>>781 はよく考えてみれば、ReadFile/WriteFileなんかの関数は
UNIXの影響下にあるOSとの互換性を意識して作られたものなのかなって
気がしてきました。
ディスクキャッシュも最終的にはpage cacheとして一元管理されているのなら
Mapして操作することとなんら違いはないはず。
ところでUNIXにおいてmmapでファイルの読み書きするのと、read/writeとでは
パフォーマンスに違いはあるんでしょうか?どこかによいベンチの結果とか
ありますか?
当然mmapの方が早い。 なぜならread/writeではカーネル空間→ユーザ空間、またはその逆の メモリコピーが発生するから、ずっとコストが高い。
出始めたばかりのSVR4のcat(1)は、
# Sunが作ってUI軍団に配布した奴ね。
mmap(2)で実装されていた。遅かった。
まあ、VMの実装によっても違うと思うが、
mmap(2)ではmemoryをたくさん食ってしまうから遅い、
buffering I/Oでは、processのmemory消費量が少なく、
disk I/Oがうまくinterleaveされるって事だったと思う。
今時の単一仮想記憶だと
>>786 なのかなあ。
Linuxはそうなんじゃないかと思うが、
FreeBSDなんかはdisk I/Oを特別に扱ってないですか?
788 :
デフォルトの名無しさん :04/09/14 15:47:28
memoryやinterleave、それにprocessはカタカナで書けよ。
790 :
デフォルトの名無しさん :04/09/14 16:29:52
昭和のカタカナ世代は横文字が苦手です 変数名や関数名にローマ字多用するのが特徴です
791 :
デフォルトの名無しさん :04/09/14 17:57:15
そしてJavaをオプソに。その後には何も残らなかった・・・
NFSなファイルのmmapってどうなんすか?
どうってなにが?
アフォはスルーの方向で。
ページフォルトもsyscallと同じくらいのコストで効いてくるだろうとは 思っていたけど、うーん。 IO-boundとCPU-boundで変わってくるのか。 キャッシュが効いてくるという話なら、バッファの大きさでも変わりそう。 MADV_SEQUENTIALはmanを読むと先行するページを早くページアウトするようにす るという後ろ向きの最適化だけど、ページフォルトを減らすべく一度に複数ペー ジをまとめてページインするようにはできないものだろうか。今の話を素直に解 釈すると、これで何か不都合がなければそれなりに効果がありそうに思うのだが。
ページというのは、ファイルのサイズを頭から4kなり8kなりの CPUのページ単位で区切って、論理的にメモリに割り当てるんでしょうか? もしそうなら、mmapするときはページ境界を意識して使う必要がありますよね。 というか、page cache一元管理を前提と考えるなら、ファイル構造やユーザー データなどありとあらゆるデータが、ページ境界を意識すべきということなのかな? mmap,read/writeの話は結局どういった使い方をするのかっていうのにかかってる ような。mmapを使うなら、極力フォルトの発生しないようにするのは、ユーザー側で 意識することだろうし。read/writeに関してはカーネルがページフォルトを 抑えるよう、特別にバッファリングしてくれるのかもしれないけど。 ちなみに関係ないですが、インテルのCPUには4MB単位、つまりページディレクトリだけの ページング方式があったように思いますが、あれじゃWindowsやUNIXといったOSは (プロセス間通信をmmapで一元管理するのはMach由来なんでしたっけ) まともに動きそうにないですね。どうなんでしょう。
まあ憶測だけで、間違った考えを持ちつづけてるのもよくないから ここいらでそろそろ真面目にソースを読んでおくべきということか。
>>798 > もしそうなら、mmapするときはページ境界を意識して使う必要がありますよね。
$ man mmap
>>800 >ファイルはページサイズの整数倍の領域にマップされる。
>サイズがページサイズの整数倍でないファイルの場合、
>マップ時に残りの領域は 0 で埋められ、.......
1) マップの単位はページ境界に整列
2) ファイルも0byte目からページ単位に区切って、それぞれページ境界にぴったりとそろえる。
という二つの意味にとっていいんでしょうか。1は当たり前のことですが。
straceによりlibc(i386)がマップされる様子を見てみると
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200^\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=1243888, ...}) = 0
old_mmap(NULL, 1254052, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4001d000
old_mmap(0x40145000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x127000) = 0x40145000
一つ目のmmapでlibcのファイル全体を、0x4001d000から1254052
(0x1322a4≒0x133000=307ページ)バイト分マップ
二つ目のmmapでおそらく.data領域となるであろう部分をPROT_WRITE,MAP_PRIVATEを指定して、
0x40145000(一つ目のマップ領域中の296ページ目、ファイル中の0x127000=295ページ目。
一つずれているのはなぜだろう?)から32768(0x8000=8ページ)バイト分マップ
という理解であってますか?これなどを見るとファイルの先頭は一応、
ページ境界に一致させてるように見えます。しかし、、リンカはあんまりページ境界を
意識してELFファイルを構成してるようには見えないですね。ヘッダのような実行時に
不要なデータは、ページ境界を意識するならどこか一つにまとめておくべきでしょうね。
ところで、二つ目のmmapは一つ目のものを上書きしてるように見えます。
ページ境界にはもちろん整列してますけど。こういうのもありなんですかね。
ELFの規格にヘッダの場所が定義されているので、 リンカの問題というよりは規格自体の話ですね。訂正。
803 :
デフォルトの名無しさん :04/09/15 14:39:33
みんな賢いなあ 何言ってっか全然分かんないや
805 :
デフォルトの名無しさん :04/09/15 23:35:50
趣味でプログラムを書いている者ですが、X lib の質問があります。ここで お尋ねしても宜しいでしょうか? UTF-8 locale 関係です。お願いします。
806 :
デフォルトの名無しさん :04/09/15 23:36:58
>>805 ごちゃごちゃ言ってないでさっさと質問しろ
UNIX系スレはこういう突っ込んだ話されないからもっとやって欲しい つーかmanが貧弱すぎ MSDNみたいなのが欲しい もちろんサンプル付きで
Xlib のスレッドあったべ。
809 :
デフォルトの名無しさん :04/09/15 23:45:12
805 です。お言葉に甘えて。 (前置き) Fedora Core 向けに、自作ソフトを UTF-8 対応しました。ところが、 動作が eucJP locale に比べて激しく遅いのです。で、何に時間を 食っているのか調べたら、XCreateFontSetでした。0.02 sec くらい だったのが、3 sec くらいかかっています。 (で、質問です) font load を早くするにはどうしたら良いのでしょうか? 見た感じでは、大量のfontをloadしているのではないかと思います。 できれば、iso10646-1 の font 一個のみで済ますようにしたいの ですが…。 宜しくお願いします。
fontconfig叩いたら? 何せ,古いインターフェースだもんでな。
>>809 $ cat ~/.xserverrc
-deferglyphs all
812 :
809 :04/09/17 21:14:09
ありがとうございます。 >> 810 さん。ちょっと覗いてみましたが、すぐには理解できなかったので、 勉強してから試してみます。 >> 811 さん。試してみました。効きました。時間は半分になりました。 今のところ、 ・Font 指定の曖昧性を減らした。(3sec -> 1sec) ・server option に -deferglyphs を設定した。(1sec -> 0.5sec) さらに、ですが、xterm は iso10646-1 のフォントのみで表示できている ので、これも参考にしてみたいと思っています。
813 :
デフォルトの名無しさん :04/09/17 21:29:33
>>810 保守もされてないし
これでプログラミングしようとする奴の気が知れないよね
>>813 script kiddyのくせに何を言う。
>>814 quiche eaterのくせに何を言う。
817 :
デフォルトの名無しさん :04/09/17 23:24:29
おつむ
てーんてん
>>813 もはや図星を点かれて何も言い返せないな・・・。
全くその通りですが何か?
個人的にUNIXは人を不幸にするOSだと思う。
さっさと死滅してくれると業界も少し平和になるんだが。
Plan9にそろそろ移行する?
MINIXでいいじゃんかよ
そこで GNU Hurd ですよ.
>>820 WinSockの理不尽なバグや意図角プロセスのリソースリークがシステム全体のダメージになったりするのはプログラマを幸せにしますか?
てゆーか普通に考えたら、 定期的に再インストールしないとパフォーマンスが落ちたり 不安定になったりするようなOSは、ものすごい欠陥品だよねぇ。 みんなよく使ってるよなあ。 なんてことをうぃんどーずから書き込んでみる。
まだwin9x使ってるの?
おれときどきfreebsd再インストールしてるよ やっぱおかしくなるし
>>827 はときどき rm -rf * ~ とかやっているおっちょこちょいさん
普通はおかしくなった時点で、その原因を調べると思うんだが…
>>829 コストの差だね。
原因調べるよりも、まず再起動した方が安い場合も多いよ。
再インストールの話題だと思ってたのはオレだけですか?
再インストールも楽になってるし、原因を調べるなんて
>>830 のいうようにコストの面からしてアホらしくなってるしな
原因を調べなくてはいつまでたっても、同じようなことを繰り返すわけだが。
繰り返すようになってから対策を練ればいい。
頭の悪い人: ・使い方がアホだからこそおかしくなる。これが根本原因 ・お仕着せのままで満足してしまうので再インストールがコストが低いと思ってる ・アホだから原因を調べられないのにコスト比較のふりをして現実から逃避 →そんなあなたにピッタリなのは……おせっかい設定てんこもりのVine Linux お仕着せをありがたがって使いましょう、好みと違っても文句禁止、質問は犬板で。 まちがってもLinux板から出てきちゃだめ 頭のいい人: ・理解して使ってればそもそも変な使い方しないからそうそうおかしくならない ・インストール後様々なカスタマイズやコンピュータにさせる仕事の設定を行う ので再インストールのコストは低くない ・おかしくならないから長いこと使う、自然カスタマイズも進む →そんなあなたは*BSDでもSolarisでもお好みでどうぞ、どれでも大丈夫
そもそもUNIXで再インストールが必要になる状況ってどんなの? Windowsだって、システモの情報がある程度まで公開されていれば 再インストールなんて必要ない。ただWindowsは複雑だから面倒くさそう。 プログラミングに関係ない話題はよそでお願いします
アフォはスルーの方向で。 まあ再インストールでいいんでねえの? バックアップもM$のクソOSに比べれば簡単なんだし。 なんでこんなに拒絶反応があるのか理解に苦しむ。
つか、再現不能で上がってきた不具合を何日も調査して結局ハード のせいだったとわかった時には。。。 _| ̄|○
バックアップのリストアは普通は再インストールとは言わないよ。 問題が内在していないのはいつの分までかを簡単に調べられたら バックアップのリストアでもいいけど、普通はわざわざそんなこと せずに動いてるシステムで原因を修正しておしまい。
>>838 は自分をスルーしろと言う珍しい香具師だな。
OSから再インストールってのは少ないが、アプリケーションの再インストール はたまにあるな。なにしろ動いてるものなんで、ゆっくり原因解析してる暇は無い。
侵入の形跡が発見されたらOSの再インストールが必要だと思います。
なんか大漁ですが 釣りのつもりはありませんでした ごめんなさい やっぱUNIXは不幸なOSなのか みんな苦労してそうだな〜
UNIXerたるもの、システムのすべてを把握しているものだ。 ファイルの一つ一つのpermissionもチェックし、 書き換わらないようなファイルの置き場と、 よく書き換わるファイルの置き場を区別するものだ。 ・・・とか言い出しそうでキモい
そのうち犬糞にシェア食われて死滅するでしょ。 ほっとけよ。
ここは UNIX"プログラミング"質問すれ ですよ。 おまえらまとめてよそでやれ。
>>845 え? まともな管理者ならファイルのパーミッションはチェックしていて当然だろ。
*BSDだとかいくつかのLinuxのdistributionだとsetuidされたファイルの
変更をcronでチェックするようになってるし、マルチユーザ環境なら
だれでも書けるファイルやディレクトリはじめパーミッションの確認は必須だろ。
Windowsと違ってデフォルトが安全サイドだから要注意対象はたかが知れてる。
後半に至っては/varの存在意義を否定してるな。
>>844 言葉が抜けてる。
UNIXは「バカにとっては」不幸なOSかも知れない
「おバカの仲間は」みんな苦労してそうだな〜
UNIXに慣れることができなかった奴は、UNIXが分らなかったんじゃなくて、 OSそのものが分らなかったんだよ。それをUNIXが古臭いということに摩り替えて ごまかす。多分そういう奴はWindowsのことも大して分ってない気がするけどね。
>>845 ファイル一つ一つについてサイズパーミッションと変更時刻を読み上げて
資料と照らし合わせるってのは実際にやるよ。
851 :
デフォルトの名無しさん :04/09/18 19:38:17
UNIXは馬鹿にとって幸福なOSだと思っていたが違うのか
UNIXは馬鹿には使えないOSです
(・∀・) うわーい、ひゃっほー!
ドライバの一つも書けない奴がUNIXを使えるとは言いません。
うわー マジキモ
ドライバ書けるけどUNIXあまりよくしらナイヨ
>>856 わしも。
仕事が組み込み系だし。
割とありがちでないの?
組み込みエンジニアはこの先引く手あまただろうな。うらやましい。 おれも勉強するぞ!
そうやって俺をイラつかせて、何をしたいんだ。 俺に恨みでもあるのか。それとも人をからかうのが好きなのか。 どちらにしても、お前は悪意をもって人を傷つけようとした。 こういう事はこれで最後にしろ。
>>859 流行っちゃうよそんなにあちこち貼ったら。
書いたひとはどっちかっていうと被害者なのに。
<事業者><送信者>
東京都新宿区西新宿2-3-15大山ビル2F
55ソフトシステムズ
配信停止の場合の返信先
[email protected] 配信停止は24時間後に反映されます。
当配信は送信に関する特定商表示義務規定に則り送信しています。
------------------------------------------------------------
以下のビジネスソフトを激安販売します
・Windows 系 Os Office 等 全て 6割〜8割 引
・Adobe 系 Os Photoshop 等 全て 8割〜9割 引
・CADソフト 及び ビジネスソフト 全て 6割〜9割 引
その他 合計280種類のビジネスソフトがあります。
サポート付きですので納得安心価格です。
郵便代引きで 即日急送します
くわしくは
http://www.55soft.net/ をご覧ください
== 55Soft.net は、ビジネスソフトの安売り王です ==
メガネをかけたやつは覗きマニアばっかりだな
863 :
デフォルトの名無しさん :04/09/20 08:09:59
>>850 UNIXの頭のいいやつなら
サイズパーミッションと変更時刻も変更せずに、プログラムを
書き換えることもできるだろ
季節もわからない人に言われても、ねぇ。
>>863 通常不可能。
root権限を奪えば可能性はありますが、それでも
例えばFreeBSDではその可能性のある操作を禁止できます。
今年は一年夏でしたとか。
869 :
デフォルトの名無しさん :04/09/20 12:37:13
870 :
デフォルトの名無しさん :04/09/20 14:58:44
CPUの判別方法を教えてください
popen("uname -m", "r");
unameはunix標準ではありませんが?バカ?
使えない環境に当たったこと無いな。
#include <sys/utsname.h> int uname(struct utsname *name);
CPUの判別方法なのに。 ヴァカ?
OSを特定せずにCPUの判別方法なんて尋ねる方がバカ。
unameをPOSIXが定めていることを知らないで暴れてる
>>872 もバカ。
>>870 config.guessとか。中を覗くといろいろやってるね。
machdep.c あたりにある identifycpu() みたいな話を言ってるんじゃないの?
職場に「昔の Unix はプログラム終了前に必ず free しないと malloc などで獲 得したメモリは開放されない」と言っている先輩がいます。これは本当ですか?
昔のUnixは知りませんが本当です
>>879 free on exit fj でぐぐればたぶん出てくるよ。
その話題はタブーです。
>>879 資源管理がいい加減なOSならリークするでしょう。
どちらにせよ、
「プロセス中で確保したもんは必ず手動で閉じなされ。」
と言うのは肝に銘じてた方がいいっす。
>>879 どちらにせよ、
「mallocしてfreeしないと云々。」
というのを耳にしたら一目散に逃げるべしと言うのは肝に銘じてた方がいいっす。
取りあえず閉じる癖付けとかないと、単発確保のメモリはともかくデーモンのループで確保して解放しないとか言う 悲しいバグを組み込む率が上がりそうだ。
886 :
デフォルトの名無しさん :04/09/21 00:03:06
最近のGCのある言語なら勝手に解放してくれるし プロセスも終了時にリソースの解放をしてくれる。 ただし自分で明示的に解放を指示になければならない ケースも存在しないわけではないので 大切なのは盲目的教条主義に陥らずに その都度最適な方法を判断することだ。
おお、今度はmalloc & freeネタか? 香ばしいねえ とはいえ、unixerたるもの、OSから借りた資源はしっかり返すものだな。 これをわかってないド素人がunixerを気取ってるのは、正直イタい。
さっそくsageも知らないヴァカが湧いてきました
>>886 いや、ファイルとかセマフォとか。<資源
GCのある言語はデストラクタの実行タイミングが曖昧なのでスマートポインタのような使い方はお勧めしない。
Javaでファイルが開けなくなるアレですね
>>886 >その都度最適な方法を判断することだ。
解放しないのが適切な場合ってどんなの?
移植性は下がるしヒューマンエラーの温床となるし、良い所ってぱっと思いつかないんだけど。
892 :
デフォルトの名無しさん :04/09/21 00:08:18
sage荒らしを発見しますた
そのプログラムのライフサイクルによっては イチイチfreeしてまわるよりはexitしてもらったほうが ソフトウェア製造コストとしては安いかもね それを最適と呼ぶかどうかは状況によるなあ
>>891 OSが適切に処理してくれるのに、わざわざ自分で処理を書いたほうが
ヒューマンエラーの元になることがわからないのか。
895 :
デフォルトの名無しさん :04/09/21 00:16:37
全部879の自作自演かな
この宗教戦争ネタでfj.lang.cで盛り上がってたのって大昔だろ いやすでにfj.comp.lang.cになってたか 今更食いついてる香具師って何者? この話題に関わっても無知蒙昧をさらすだけよ、いろんな意味で。 すでに1000000辺ぐらい繰り返された論争の、低レベル縮小ミニマム再生産版 見せられて喜ぶ奴なんていやしないんだから。
古典芸能ですよ。
20レス稼いだ
なんか大漁ですが 釣りのつもりはありませんでした ごめんなさい やっぱUNIXは不幸なOSなのか みんな苦労してそうだな〜
不幸なのはユーザーだけだから
>>900 リソースリークが即死を意味するようなWindowsよりかは幸せです。
>>903 犬糞や海栗糞が窓叩く場合Win98以前をターゲットにするのがマナーなんだよ。
関係ないはなししは他所でおねがいします。
>>904 それがWin2kだったりするから質が悪いんだと。
まぁ、俺のプログラムの質が悪かったと言えばそれまでだが。
某プラントシステムがぐらぐらになったよ。
Windowsの場合、メモリはリークしてるように見えてるだけ
908 :
デフォルトの名無しさん :04/09/21 00:38:55
だからさC#やJavaが台頭してきた時代に 前世紀の遺物であるfj.comp.lang.cを楯に思考停止に陥るのは いかがなものかと言ってるわけさ。
>>907 そう言われても俺の糞プログラムにはmallocはあってもfreeはない。
いみふめー
>>908 ネイティブな言語が減ってきて暮らしにくい世の中になったなと。
豊富な資源がアル前提でRADするには最高の環境なんだけどね。
>>908 盾にって言われても、fjでの議論の結論知らないんだけど
どっちが勝ったんだっけ?
>>912 そんなことはどうでもいいんだよ。
いったんリセットして僕たちは0から話し合うべきなんだ。
結論なんてでるわけないじゃん。 自分でOS作って俺環境こそが唯一正しいと 主張するならある程度の妥当性はあるだろうけど。
>>913 正解。
昔と今では状況も違えば常識も違う。
ムーアの法則が未だに有効であることからも状況が少なからず変わっていることがおわかり頂けるだろう。
>>905 が無視されているようなので一応言っておこう。
はなししってなんですか。
>>914 linuzの性格がもう少し悪ければ・・・と言う話ですね?
>>889 > GCのある言語はデストラクタの実行タイミングが曖昧なので
みんなJava風なわけではない。
>>912 fjや2chの議論に結論はない。まとめがある場合はある。
free on exitはまとめがあったはず。
ちゃんと解放しろっての リソース=メモリってわけじゃないし
直後に exit することがわかってんなら必要ねえっての 明示的に開放しないと問題のあるリソースならともかく
1000までに決着つけようぜ
その前にgotoの是非について決着をつけろ
goto使うやつは馬鹿
goto使わないやつはマヌケ
goto使えないやつは馬鹿
うひょーーーーーさっそく知将が発生したっっっ
SIGPLANではインデントの話は禁止です。
goto HEAVEN;
>>912 俺はホントに最初の頃の議論しか見てないが、印象としては
UNIX系のマトモなHosted Environmentを主に使ってる人→
そんなのカーネルにまかせろや。free()しないと回収できないような
システムなら、killもできないってこったぜ
仮想メモリ管理をちゃんとやってるOSでfree on exitなんざアホの極み
主に組み込み系エンジニア、またはWin16あたりのクソOSユーザだった人→
回収しろったらしろ。
な感じと記憶しているが、確実にいえるのは「必要な場合ならやれ」。それだけなら
当たり前で、そこに移植性やらコーディングスタイルやら思想やらの問題を
持ち出す香具師がいるから宗教戦争になる。
ただ、業務系では意外に頭固い人多いんだよね。free on exitをしないのは
だらしが無いとか何とか。「それが適切か」ではなく、「そもそもそういう
スタイルが許せない」人が多い。
gogo HEAVEN;
気になる人は atexitに登録した関数内で開放するということでFA?
Ruby!
Rubyはリークしまくるから業務には使えないと思う。 いつ安定するんだか。
Ruby.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>UNIX
↑なんか最近怖くなってきたw
elisp>>>>>>>>>>>>>>>>> Ruby
Python >>>>>>> |越えられない壁| >>>>>>>>>>>> Ruby
Cはリークしまくるから業務には使えないと思う。 いつ安定するんだか。
Pythonはリークしまくるから業務には使えないと思う。 いつ安定するんだか。
CPUはジャンプしまくるから業務には使えないと思う。 いつ安定するんだか。
電子は振動しまくるから業務には使えないと思う。 いつ安定するんだか。
お前ら2chやりすぎるから業務には使えないと思う。 いつ仕事するんだか。
宇宙は膨張しまくるから業務には使えないと思う。 いつ安定するんだか。
アソコが膨張しまくるから女にはぶち込めないと思う。 いつ発射するんだか。
947 :
デフォルトの名無しさん :04/09/21 12:00:53
せめてageろ。
950 :
デフォルトの名無しさん :04/09/21 18:02:02
結論はないという結論
951 :
デフォルトの名無しさん :04/09/21 20:05:11
メジャーなオプソプロジェクトでfreeしていないものを教えてください。 またfree不要論者は最大何人月、何行くらいのプロジェクトでfreeを省きましたか?
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>>> free
954 :
デフォルトの名無しさん :04/09/21 22:34:50
ニゲタ━━━━(゚∀゚)━━━━ッ!!
オープンソースプログラムで、必要なfreeを行っていないプログラムを知りたいんでしょ。
FreeBSDの/usr/bin配下調べればありそうだけど面倒だからやらないw
いまちらと見たが、freebsdのcatはmalloc()を一回しててfree()してない。 プロセスの実行中に何度も実行され、ワーキングセットを着実に増加させて いくような性質ではないmalloc()なら、わざわざfree()してないプログラムは 多いだろう。 典型的なのが、初期化処理内でのmalloc()ね。
必要なfreeはやるべき。それは誰も否定してない。 必要じゃないfreeをやらなくていいって話
そしてすべての free が必要だと主張する人がいて以下 loop.
そんなヤツはアホなので即刻 exit
賢い人はこういうドキュンな話題には触れないよな
賢い人はちゃんと全部freeするからな
>>963 禿同。
みんな引きオタの実績0の脳内理論に釣られすぎだよ。
習慣的にワンセットでfreeまで書いてしまうよな
いらなくなったらfreeするけど、いらなくなる時点=プログラム終了時 ならexitするだけで済ましちゃうな。楽だし(笑)
967 :
デフォルトの名無しさん :04/09/22 11:57:36
age
(笑)
>>966 あーあ。non portableなプログラムを書いてしまったね。
970 :
デフォルトの名無しさん :04/09/22 12:00:04
今時ポータブルなプログラムって(笑)
既にそう書かれてしまった過去の遺物、小規模使い捨て、個人用途の そもそもスタイルを云々することの必要性が皆無なプログラムの場合 好きにしろと言うことだよ。
(笑)
(藁)
(w)
ところで、freeせずにexitするとmallocした領域が戻らない 実装のUNIXにはどういうものがあるか教えてください。
バグ持ちUNIX
977 :
デフォルトの名無しさん :04/09/22 12:53:04
そういうのって途中で強制終了したら解放されないんだろうか
リブートしてもリークしたメモリが物理的に焼きついちゃうこともあるらしい
ふーん
今までに書いた最もうんこなコード。 今もどこかで動き続けているに違いない。 void *foo() { static void *buf; if(!buf) buf = malloc(...); ... return buf; }
981 :
デフォルトの名無しさん :04/09/22 13:14:05
なんでstatic
NULLとfreeはセットで
【旧態依然】malloc&free総合スレ【温故知新】
次は open と close について議論します
>>931 >主に組み込み系エンジニア、またはWin16あたりのクソOSユーザだった人→
Win16でもfreeいらないでしょ。
わざわざfreeしない理由がわからん OSに頼るのはセーフティネットとして でいいじゃん
やることがないと詰まらない事を考えるようになるんだよ。
わざわざfreeする理由がわからん
>>991 実際頭の回らなくなってきたロートルがごねてるだけだしな。
>>989 OS に頼らないでプログラムを組むのは(特に Unix の場合)難しいと思うけど。
#define malloc(s) free(malloc(s))
要するにfreeのステータスはチェックしろってこと
unameもそうだけど、 UNIXって意味不明な名前のコマンドだらけで嫌気が差した いいからメニューから全機能選べるようにしろよ イミフメコマンド文化なんか続けてるから一向に普及しないんだよ
ほうほうなるほど
まずは自分の脳味噌をどうにかしろよ馬鹿が
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。