[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 09:49 / Filesize : 207 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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/

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がファイルは云々と標準入力のことを棚上げして
以降話がかみ合わないままなんだよ

629 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:48:25 ]
>>626
標準入力はEOFにならないとしてもファイルはEOFになるんじゃないの?
一度EOFまで達したファイルディスクリプタって
その後書き込みがあったときに読み込み可能になるの?
標準入力はselectで待てるけど、ファイルは最後まで読み切ったら
selectのタイムアウト後に自分でseekしてみるしかないんじゃなくて?
それは別々な処理だし、selectで待つとは言い切れないんじゃない?

630 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 21:52:40 ]
>>624
一旦EOFを返しても、そのファイルが拡大されれば、
その後のread(2)でデータが読める。select(2)もOK。
この仕様は4BSDが始めた。(たしかtail -fのために)

その頃のSystem Vは駄目だったけど、今これがダメなUNIXはないと思う。
www.opengroup.orgあたりはどういう風に言及しているのかな。



631 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:00:00 ]
拡大されるまでは無限ループし続けるのか
そりゃずいぶんな実装だなw

632 名前:630 mailto:sage [2005/08/07(日) 22:08:03 ]
GNUのtailなんかは再チェックのsleep時間を指定可能。

最近のUNIXはfile notificationがあるので、
(fcntl(2)のF_NOTIFY&DN_MODIFY)
こっちを使えば、いい場合もあるけど。(tail -fではみたことないけどね)

633 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:09:28 ]
結局select()でtail -fを実装できないのは同じだな
どんなプログラムだったんだろう・・・見てみたい

634 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 22:18:15 ]
>>632
EOFに達してもselect抜けるよね
EOFに達したあと、再度selectにつっこんだら
拡大されるまではブロックされるの?

635 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:16:39 ]
まぁ最近じゃ tail -f は sleep なんかせずに kqueue を使って
スマートに実装されてる訳だが。

636 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:42:36 ]
tail.c
www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/tail.c?rev=1.21&content-type=text/x-cvsweb-markup

637 名前:デフォルトの名無しさん mailto:sage [2005/08/07(日) 23:57:54 ]
該当部分はこっちだろ。
tail/forward.c
www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/forward.c?rev=HEAD&content-type=text/x-cvsweb-markup

638 名前:デフォルトの名無しさん [2005/08/08(月) 00:57:00 ]
makefileの書き方で質問です。
makefileのあるディレクトリの下に、
Aというサブディレクトリと、Bというサブディレクトリがあり、
ここのサブディレクトリにもそれぞれmakefileがあります。
このとき、親ディレクトリからAとBの両方を一度にメイクするには
どのように書けば良いのでしょうか。

よく他人の作ったプログラムやLinuxのカーネルをメイクすると、
入ります ディレクトリ xxx
出ます ディレクトリ xxx
というような表示が出るのですが、その方法を教えてほしいです。

639 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 00:57:55 ]
echoコマンドつかってるんじゃね?

640 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 01:02:24 ]
>>638 make -C
pc8.2ch.net/test/read.cgi/tech/1029599472/



641 名前:618 mailto:sage [2005/08/08(月) 02:45:52 ]
最早恥晒しにしかならないみたいだけれど、一応概略のみ。
--
FILE * fp = fopen(file, "r");
fseek(fp, 0, SEEK_END);
for (;;) {
if (fgets(fp)) {
/* tail -f相当 */
}
FD_SET(0);
select();
if (rtn > 0) {
if (FD_ISSET(0)) {
if (!fgets(stdin)) {
break;
}
/* ファイルに書き出す */
}
--
実際にはこれにmsgが絡んでもう少し複雑。

642 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 10:08:29 ]
stdioとselectは混ぜるな危険。
バッファには先読みされてるがselectでは空という場合もあるぞ。

643 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 10:10:12 ]
正直、>>618には失望した

644 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 13:22:16 ]
setvbuf(f, _IONBF)やfflush()と併用すれば安全に使える状況も多い。
fscanf()あたりと使うのは絶望的。

645 名前:618 mailto:sage [2005/08/08(月) 18:52:10 ]
失望されちった。

流石に標準入力は実際にはfgets()してません。
バッファリングしない一行入力関数を作ってそれを呼んでます。
#だから概略なんだってば。

646 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:04:39 ]
FreeBSDまたはLinuxでpthreadを使用してメインスレッドとサブスレッド内で
sleep(3)を使おうと思ってるのですが、sleep(3)はスレッドセーフですか?
man(FreeBSDとLinuxの両方)を見たけどその記述が見つかりませんでした。

647 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:07:56 ]
駄目だよ。SIGALRM使っているから。select(2)使いな。

648 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:20:09 ]
>>647
SIGALRMでsleep(3)実装ってどんな化石OSの話でつか。

649 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:41:57 ]
>>648
( ゚д゚) ポカーン


(´-`).。oO(わからないなら黙ってればいいのに…)

650 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 02:55:14 ]
GUIプログラミングを学びたいのですが、どこから始めればいいでしょうか。
レベルはK&Rを読了です。




651 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 03:07:35 ]
>>649
( ゚д゚) ポカーン
thread safeにするため最近のOSじゃalarmは軒並みnanosleepで実装されてるよ。

(´-`).。oO(じじいはひっこんでりゃいいのに…)

652 名前:デフォルトの名無しさん [2005/08/09(火) 03:08:54 ]
alarmじゃねえ、sleepだ。
大事なところで噛んだ。ちきしょう。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<207KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef