1 名前:デフォルトの名無しさん mailto:sage [2005/05/24(火) 13:14:50 ] UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 前スレ Part5 pc8.2ch.net/test/read.cgi/tech/1105723117/ Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/ Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/ Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/ Part1 pc2.2ch.net/tech/kako/992/992057422.html Part3のミラー makimo.to/2ch/pc5_tech/1085/1085930894.html Part2のミラー makimo.to/2ch/pc5_tech/1055/1055110889.html 関連スレ Cygwin使っている人いますか? その14 (UNIX板) pc8.2ch.net/test/read.cgi/unix/1107587275/ Cygwin使っている人いますか? 3 (Windows板) pc8.2ch.net/test/read.cgi/win/1090131123/ 関連板 pc8.2ch.net/unix/ pc8.2ch.net/linux/
528 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 19:34:37 ] >>527 firefoxが生きている間待ちつづけるスクリプトを書くとか
529 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 19:41:24 ] 拡張とか書かないと無理じゃないかねぇ。
530 名前:527 [2005/07/11(月) 19:56:25 ] >>528 ちょっとイメージがわきません。 詳しく教えていただけますか?
531 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 19:56:32 ] systemじゃなくて fork + exec じゃだめなんか?
532 名前:527 [2005/07/11(月) 20:12:31 ] >>531 pid_t child; if ((child = fork()) == 0) { execlp("firefox", "www.linux.or.jp/ ", (char*)0); } if (child < 0) { goto end; } waitpid(child, NULL, WNOHANG); をやったのすが、指定したURL www.linux.or.jp/ が表示されず、 また waitpid もすぐ戻ってしまいました。 どうすればいいんだろう...
533 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 20:24:35 ] execlpの引数合ってる?
534 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 20:26:19 ] > firefoxは、既に起動していると既存のfirefoxプロセスにて新URLへのウ > ィンドウを開くため が真実ならば、fork() & exec()で実行しようが何の解決にもならんだろ 馬鹿馬鹿しい
535 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 21:57:58 ] ソース読めばぁ?
536 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 22:37:12 ] つーか、ソフトウェア板行ったら、 誰かがその目的に合った拡張を書いてくれると思う。
537 名前:526,527 [2005/07/12(火) 13:33:12 ] dirtyな方法でしょうが、なんとか動かすことができました。 とった手段は次の通りです。 1.スレッドでURLに対応したプロファイルを作成する プロファイルは既存のものでも大丈夫なようです。 system("firefox -CreateProfile <profile>"); 2."1"のプロファイルを指定し、firefox を起動 system("firefox -P <profile> <url>"); 新規に作成したプロファイルの場合、標準エラー出力にエラー/警告がでます。 上記によりその都度 firefoxが別プロセスで起動し、子スレッドが system でブロックするようになりました。 firefoxを閉じると system から戻ります。 他に良い方法がありましたらどうぞご教授下さい。 色々考えてくれたか方々、ありがとうございました。
538 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 20:01:45 ] >>537 だからさー、何でソース読まないの?
539 名前:537 mailto:sage [2005/07/12(火) 20:52:14 ] -、 ,.-、 ./ .\ / ヽ / ;ゝ--──-- 、._/ .| /,.-‐''"´ \ | / ヽ、 | / ● ヽ| >>538 l (_人__ノ ● l いや、そんな事言われても .| ´´ | / | ワテ猫やし l ヽ_/ ´´ l ` 、 / `ー 、__ / `'''ー‐‐──‐┬‐‐'''"" / | / |
540 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 21:08:08 ] >>539 なごんだ
541 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 00:27:29 ] APUEの新版買った人いる? いたら感想聞かせて
542 名前:デフォルトの名無しさん [2005/07/17(日) 07:40:38 ] クラスの関数でEUCの文字列をUTF-8に変換するものを作りました。 これをあるプログラムから呼ぶと正しく処理できるのに、別のプログラムから 呼ぶとiconv_open()の部分で iconv_open(): Invalid argument とエラーになってしまいます。iconv_open()の引数は固定なので上記のような エラーにはならないと思うんですが、こういうことはどういう原因で起こりえる のでしょうか? 曖昧な質問ですみません。 2つのプログラムは同じ環境でコンパイルして動かしています。 MiracleLinux2.1 + gcc3.2.2 + glibc2.3.2です。 --- class Hoge { ( ... 略 ... ) void Hoge::UTF8deHyouji(const char*str) { ( ... 略 ... ) iconv_t cd = iconv_open("UTF-8","EUC-JP"); if(cd == (iconv_t)-1)){ fprintf(stderr, "iconv_open(): %s", strerror(errno)); return; } if(iconv(cd, &inbuf, &inleft, &outbuf, &outleft) == (size_t)-1){ fprintf(stderr, "iconv():%s", strerror(errno)); } iconv_close(cd); ( ... 略 ... ) } }
543 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 09:36:49 ] まずmainの直後でやれ 話はそれからだ
544 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 09:39:21 ] man iconv_open の ERRORS のセクションはご覧になってらっしゃる?
545 名前:542 mailto:sage [2005/07/17(日) 12:57:11 ] >>543 変換部分だけを切り出して実行すると正常に動作します。 またクラスから呼び出して動作する場合もあるのです。 もともとは大きな(?)プログラムの中で使用されていたクラスで そこではエラーになるので、クラスの関数だけ呼び出して実行 する簡単なプログラムで試したらエラーが出ないという謎の状況 です。 >>544 変換だけ行うプログラムなどでは正常に動作するので、サポートは されていると思うのです。また、iconv -l でもEUC-JP、UTF-8がある ことを確認しました。同じ環境でプログラムによってEINVALが返って しまうことはあったりするのでしょうか…?
546 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 13:57:34 ] iconv_openの呼び出しをstraceしてみるトカ
547 名前:542 mailto:sage [2005/07/17(日) 14:40:26 ] >>543 ふと思い立って、動かないほうのプログラムのmain()で iconv_open() 〜 iconv_close() までの処理を書いてみたら そこでも「Invalid argument」になってしまいました。 だんだんワケがわからなくなってきました…orz >>546 ありがとうございます。やってみます。 (実はstrace自体知らなかったりしますが…)
548 名前:542 [2005/07/17(日) 14:53:40 ] straceの結果、下のような行がありました。 open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/lib/gconv/gconv-modules", O_RDONLY) = -1 ENOENT (No such file or directory) 動かないほうのプログラムを調べてみると、サーバプログラムなので 実行ユーザのホームにchroot()していました。試しにchrootしている 箇所をコメントアウトしたら正常に動作しました。 問題の原因は解ったのですが、iconv()を使用するプログラムでは chrootしてはいけないということになるのでしょうか?セキュリティの 関係でここはchrootしておきたいのですが、何か良い解決策はない ものでしょうか。
549 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 14:57:56 ] chrootした先にも必要なもの一式そろえてあげればいいのでは。
550 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 15:33:21 ] >>548 chrootの意味わかってるか?
551 名前:542 mailto:sage [2005/07/17(日) 15:35:38 ] >>549 ホームディレクトリを基点に/usr/lib/gconvのディレクトリを掘って 丸ごとコピーしたら動きました。ありがとうございます。
552 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 15:39:15 ] ソースをざっと見ただけだけどchrootの前に一回iconvを呼べばそれは必要ない気がする。
553 名前:542 mailto:sage [2005/07/17(日) 15:49:42 ] >>550 一応解っていたつもりだったのですが、iconv_open()などの 内部で行われる動作についてはなんとなく例外のような感じが していました… >>552 最初に生成した変換ディスクリプタを使いまわすということでしょうか。 うまく行きそうな気がするのですが、ちょっと構造が大きく変わってしまうので 別の機会に試してみたいと思います。
554 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 15:58:15 ] そうじゃなくて、gconvは最初に呼ばれたときに一回だけgconv-modulesを読み込んで 初期化して、それ以降はファイルアクセスしないみたいだから。
555 名前:542 mailto:sage [2005/07/17(日) 16:58:39 ] >>554 確かに>>548 のエラーもログの中で一度しかでていませんでした。 仰るとおりchrootの前にiconv_open()→iconv_close()だけ実行したら コピーしたファイル無しでも問題なく動作しました。 これで全てすっきりです。 ご回答いただいた方々、本当にありがとうございました。
556 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 20:02:05 ] このスレやっぱスゲー
557 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 20:48:13 ] どの辺がすごいのかよくわからないのだが ム板のほうが深い話できるだろ
558 名前:デフォルトの名無しさん mailto:sage [2005/07/17(日) 23:05:32 ] 根拠がソースだけだと気持ち悪いのでマニュアルの記述を探してきた。 英語を面倒がらず、ソース読む前にマニュアルを読むべきだったな。>自分 www.gnu.org/software/libc/manual/html_node/glibc-iconv-Implementation.html > 6.5.4.1 Format of gconv-modules files > ... > At the first call of the iconv_open function the program reads all available > gconv-modules files and builds up two tables: one containing all the known > aliases and another that contains the information about the conversions and > which shared object implements them.
559 名前: ◆AE4dNGZqMw mailto:sage [2005/07/21(木) 07:09:48 ] ちょっと愚痴らせてくれや コンソールでscreen使ってソース書いてたんだけど Xlibを使ったコードだったから、実験するためにtwm立ち上げて そこでscreenをデタッチしてkterm上で実行してみたわけよ、でもなぜか セグフォるの、調べてみたら color_black = BlackPixel( disp, 0); これでセグフォる どう考えてもセグフォる部分じゃない 3時間ものすごい頭使って今まで考えたわけよ pika−−−−−−−−−−nn!!!!!!! もしかして、screenをデタッチしてやったからコンソールのときのなんかの変数受け継いでるのかな? で、あたらしくkterm立ち上げてashで生で実行 ‥‥‥‥‥‥‥‥‥‥ いけた‥‥‥‥ ほんと、今までの3時間なんだったんだろう‥‥ ごめん、 どうしても誰かにいいたかったの‥‥
560 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 07:33:36 ] あるマニュアル読んでたら フォント名はコードに直書きするんじゃなくて .Xresourcesに書けって書いてあるんだけど なんで? 指定フォントの決め打ちなのにわざわざ書かせなきゃいけないの? ってか、どうやって読み込めってんだよ
561 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 09:31:59 ] 再コンパイルすることなく、 カスタマイズすることができる
562 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 09:45:40 ] >>559 環境変数を確認するのはことXWindowに関しては常道。 >>560 おまいさんもXWindowに関して基礎から勉強し直した方が…
563 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 10:58:37 ] XWindowの基礎なんて勉強しても無駄になることうけあい
564 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 11:09:11 ] 身に付けて無駄になる基礎なんてない。
565 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 11:24:32 ] Xを使う以上、基本はXを知ることだと思うんだけど Xの知識が無駄になるってどういうことなの? また違うWindowSystem誰か作ったの?
566 名前:560 mailto:sage [2005/07/21(木) 11:46:10 ] ありがと でも決め打ちだよ? そのフォントじゃないと正しく動作しないの それでも、やれっていうの?
567 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 12:07:51 ] 今使ってるフォントに問題が発覚して 正しく動作する別のフォントに入れ替える必要が出てくるかもしれない。 とかね。 べつにローカルな使用だけでソースが手元にあって いつでもコンパイルできるならなんでもいんじゃね?
568 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 12:29:23 ] >>565 「Xの仕事が無い」というだけのこと
569 名前:565 mailto:sage [2005/07/21(木) 19:43:12 ] お前らの人生全て仕事なんだ・・・ 寂しいね
570 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 20:53:19 ] >>569 お、俺を一緒にするなよな? な?
571 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 21:11:20 ] うーん でも仕事以外にXって使わないからなぁ・・・
572 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 21:58:54 ] 家ではWindows使ってるって事?
573 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 07:56:56 ] >>559 > もしかして、screenをデタッチしてやったからコンソールのときのなんかの変数受け継いでるのかな? 「もしかして」じゃなくて調べろよ。 for i in `env | awk -F= '{ print $1 }'`; do (unset "$i"; ./a.out); done どうせ全然違う原因だと思うが。
574 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 08:36:40 ] なにがしたいのかがまったくわからん
575 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 22:48:34 ] 単に XOpenDisplay() に失敗していたけどエラーチェックして なくて、disp == NULL で落ちてたってだけじゃないの?
576 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 11:01:11 ] C/C++質問スレから誘導されてきました。 子プロセスの標準出力と標準エラー出力を親プロセスで取りたいのですが、 たまに出力を取る部分で止まってしまいます。fgetsしているところで止まっている ので、eofがくるまで待っているのか、とも思っているのですが・・・。 子プロセスの標準出力と標準エラー出力を別に取りたいので、forkしてパイプを つなげる必要があると認識しています。 テストでつかったソースは以下のアップローダにupしました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/819.c #main関数内で起動用のコマンド文字列を作っているのですが、 #このソースでは省略しています。 このような時、どうすればよいのでしょうか。どなたかご教授ください。
577 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 12:05:12 ] 子側でstderrのバッファが満杯になってブロックされてんじゃないの?
578 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 12:19:30 ] selectかスレッドを使って読み出せ。
579 名前:576 mailto:sage [2005/07/30(土) 12:55:27 ] アドバイスありがとうございます。 > 577さん バッファが満杯でブロックされてる場合は578さんが書いているように 1.スレッドで満杯になる前に逐次読み出してやる 2.selectでタイムアウトを設定する という形でしょうか。 > 578さん スレッドはぱっと調べた結果、手に負えそうもないので、selectについて調べてみました。 selectはファイルディスクリプタが読み書き可能になるまで待機して、準備できた場合は 1以上を返す、という理解でよろしいのでしょうか。 #上記のブロックされた場合はタイムアウトでbreakする? selectを使って色々いじってみます。
580 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 14:49:47 ] select(2)やってみる前に、 とりあえずstrace -p PIDを全てに試してみたらどうなのよ? # Solarisだとtruss ありがちなのが、bugで誰も書いてないpipeを読んでいるケース。
581 名前:576 mailto:sage [2005/07/30(土) 19:23:22 ] > 580さん straceですか。そのようなコマンドがあることは知りませんでした。 #ものすごい今更ですが、Linux/gcc環境なので #straceで使えました。 早速実行してみた結果、以下のように・・・ $ strace -p 19592 write(2, "書き込みメッセージ・・・"..., 46 $ strace -p 19590 read(3, もしかして580さんの仰るとおり読み出すpipeが違うのでしょうか。デバッグライト では、子プロセスの書き込み先は対になる4だったのですが・・・。 メッセージを読み出せる場合の方が多かったので油断していました。
582 名前:デフォルトの名無しさん mailto:sage [2005/07/30(土) 19:37:43 ] >>581 >>579 の時点で妥当な結論が出ているので580はさくっと無視するのが吉。 どうせあなたのプログラムも読んでない。
583 名前:デフォルトの名無しさん [2005/08/02(火) 11:54:06 ] kernel2.6系で、システムコールをフックする方法を教えて下さい。 このページには2.4での方法が書いてありますが、2.6ではうまくいかないです。 ttp://www.atmarkit.co.jp/fsecurity/rensai/rootkit03/rootkit02.html 上のページと同じように、sys_unameをフックするソースを晒して下さい!!
584 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 11:58:37 ] それくらい自分で調べられないお子ちゃまはおいたしちゃダメ。
585 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 12:37:43 ] >>583 LKM rootkit のソース読めばいいじゃん。
586 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 17:30:35 ] >> 585 kernel2.6では、結構大変そう。。。 カーネルのバージョン毎にrootkitの対応状況が異なる。 最新版カーネルで、フック&晒しよろろ。 2.6全般のシステムコールをフックするrootkitがあれば、教えてください。
587 名前:デフォルトの名無しさん mailto:sage [2005/08/02(火) 19:24:43 ] >>586 いや、だから自分で読めよ。
588 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 02:23:45 ] >>586 straceは、すべて(!?)のシステムコールをフックしてるんじゃないか? よくしらんがね。
589 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 15:55:42 ] このスレッドの576で質問させていただいたものですが、また お知恵を拝借させていただけないでしょうか。 SolarisとLinuxではforkしてexeclpしたときの振る舞いが違う、 という現象で悩んでいたのですが、どうやらshの違いではないかと いうところまで突き止めました。 Linuxの場合、shはbashのシンボリックリンクになっていて、-cでコマンド 起動をするとpidはshと同一になるのですが、Solarisですとshとコマンドが 別のpidになります。 Solarisではforkの返り値のpidでkillしてもコマンドは別pidなので殺せない ようなのです。 Solarisのshでbashと同じ動作をさせるか、何とかして孫(sh->コマンド)のpid を取ってきてkillする方法はありませんでしょうか?。 > 582さん アドバイスありがとうございます。selectでうまく動作させることができました。 #まとめをUPしようかとも思ったのですが、2chでは一般的ではない行為です?
590 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 16:09:35 ] >>589 いろいろ方法はないではないけどね。 ps出力相当の情報を拾ってきて、ppidがshのpidのプロセスを探すとか。 そもそも、なんでexeclp()でshを動かすのかが問題かな。 シェルを経由しないで直接動かせばいいじゃんと思うわけだ。 killハンドラで子供を殺すプロセスを中継に使うって手もあると思うし。 #まとめは歓迎。この件だけでもこのスレ全部でも、すきなだけやっちゃってくださいw ##で、アップロードはアップローダかどこかに。
591 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 17:39:38 ] >>588 んなことはない。 共通の入口と出口を抑えているだけでつ。
592 名前:デフォルトの名無しさん mailto:sage [2005/08/04(木) 21:50:42 ] >>591 ltraceなんかは純然たるwrapperだわな。 >>589 sh -c 'exec command args'してみれば?
593 名前:デフォルトの名無しさん [2005/08/05(金) 16:12:11 ] >>589 fork() したら、子プロセスの最初で setsid()して新しいセッション/プロセスグループを作成する。 こうすると kill(-pid, SIGTERM)とかでそのプロセスグループに対して killすることがでけるよ。 こんな感じ child = fork(); if (child == 0) { setsid(); execlp(〜); } 〜〜 kill(-child, SIGTERM); 自作アプリで Firefoxをexec、killしたい時にやりました。
594 名前:デフォルトの名無しさん mailto:sage [2005/08/05(金) 17:10:50 ] >>592 ltraceはwrapperじゃないよ。 stepモードで実行して、libcの関数の先頭アドレスにjumpした瞬間を拾って スタック先頭から引数を拾って表示している。だから死ぬほど遅い。 wrapperにすると可変長引数に対応できないからな。
595 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:07:29 ] 現在実行している環境が32ビットか64ビットか判別する方法を教えてください。
596 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:29:14 ] >>595 すべてのUNIXで共通して判別できる方法はありません
597 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:36:17 ] >>595 intの最大値を調べてみたら?
598 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:38:21 ] ILP64かもしれないし
599 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 02:39:03 ] 違った LP64かもしれないし(つーか普通そう)
600 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:16:51 ] sizeof(void*) sizeof(long) sizeof(int) の結果を見て好きなように解釈すれ
601 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:22:37 ] お前らアホか? CPUのことだろ? dmesgでCPUみたらいいだろ
602 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:26:28 ] スレのテーマ的には実行中のプログラムが自分で判断する方法ということでは?
603 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:27:20 ] >>595 実行してる環境の「何が」32ビットか64ビットかによって判定法が異なる。
604 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 03:55:47 ] 目的に応じてautoconfのマクロを自分で書けばよかろ
605 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 04:34:51 ] >>601 OSが64bitであろうと32bitであろうと、 実行環境のbit数は関係ないだろう。emulatorかもしれないんだし。
606 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 12:28:22 ] >>601 そもそも dmesg が入っているとは限らない。
607 名前:デフォルトの名無しさん [2005/08/07(日) 12:47:21 ] uname -aはどうでしょう?
608 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:02:41 ] CPUを見ても32bitか64bitかなんて決定できないだろ。 両方のバイナリを実行できるOSもあるし。 >>600 ,603あたりがFAじゃねーの。
609 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:06:00 ] なんで600が?
610 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 13:16:35 ] >>609 結局603を間がえたあと www.opengroup.org/public/tech/aspen/lp64_wp.htm 見たいな感じで600のようなことをすることになるわけで。
611 名前:デフォルトの名無しさん [2005/08/07(日) 14:11:01 ] select() システムコールはどのような時に使用するのでしょうか? 簡単な解説があるサイトを紹介していただいても結構です。
612 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:13:02 ] www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
613 名前:sage [2005/08/07(日) 14:17:31 ] ありがとうございます。 例をもとに、動作検証してみます。
614 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:18:12 ] >>611 ひとつのスレッドで同時に複数I/Oを実行したいとい
615 名前:sage [2005/08/07(日) 14:37:06 ] ありがとうございます。>> 614 サンプルとか例などはありませんでしょうか?
616 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 14:45:35 ] www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html
617 名前:デフォルトの名無しさん [2005/08/07(日) 14:51:05 ] selectの掟とかあって、難しそうですが、 理解できるように努力してみます。 ありがとうございました。>> 614 616
618 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 17:05:00 ] ファイルからの入力を監視しつつ標準入力を受け付けるような応用はselect()で事が足りるね。
619 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:12:18 ] ファイルからの入力はselectしなくてもいつでも読み出し可能だろ
620 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 18:32:31 ] nfsやgmailfsでも?
621 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 19:12:58 ] >>620 理論上は
622 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 19:35:42 ] readがブロックすることと、readに時間がかかるのは別。
623 名前:618 mailto:sage [2005/08/07(日) 20:18:08 ] >>619 tail -f相当しながら標準入力をファイルに書き出すプロセスを実際に作った経験で書いたんだけど。
624 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 20:54:12 ] tail -f相当って普通に考えて現在のファイル末尾まで 読んだらEOF返るだろ select()しても無駄なんじゃないの そのへぼプログラムはポータブルに動くのか?
625 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:09:09 ] そうなんだ ファイルがまだcloseしてないときでも EOFが帰るのか ちょっと試してみるか
626 名前:618 mailto:sage [2005/08/07(日) 21:14:50 ] >>624 いや、標準入力はEOFにならないんだけど。
627 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:35:00 ] なんか618がかわいそうになってきた。
628 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:41:54 ] >>627 いや、>>619 と>>618 が戦ってるだけだろ >>618 が標準入力とファイルを読む という話をしているのに対して >>619 がファイルは云々と標準入力のことを棚上げして 以降話がかみ合わないままなんだよ