05/07/17 15:33:21
>>548
chrootの意味わかってるか?
551:542
05/07/17 15:35:38
>>549
ホームディレクトリを基点に/usr/lib/gconvのディレクトリを掘って
丸ごとコピーしたら動きました。ありがとうございます。
552:デフォルトの名無しさん
05/07/17 15:39:15
ソースをざっと見ただけだけどchrootの前に一回iconvを呼べばそれは必要ない気がする。
553:542
05/07/17 15:49:42
>>550
一応解っていたつもりだったのですが、iconv_open()などの
内部で行われる動作についてはなんとなく例外のような感じが
していました…
>>552
最初に生成した変換ディスクリプタを使いまわすということでしょうか。
うまく行きそうな気がするのですが、ちょっと構造が大きく変わってしまうので
別の機会に試してみたいと思います。
554:デフォルトの名無しさん
05/07/17 15:58:15
そうじゃなくて、gconvは最初に呼ばれたときに一回だけgconv-modulesを読み込んで
初期化して、それ以降はファイルアクセスしないみたいだから。
555:542
05/07/17 16:58:39
>>554
確かに>>548のエラーもログの中で一度しかでていませんでした。
仰るとおりchrootの前にiconv_open()→iconv_close()だけ実行したら
コピーしたファイル無しでも問題なく動作しました。
これで全てすっきりです。
ご回答いただいた方々、本当にありがとうございました。
556:デフォルトの名無しさん
05/07/17 20:02:05
このスレやっぱスゲー
557:デフォルトの名無しさん
05/07/17 20:48:13
どの辺がすごいのかよくわからないのだが
ム板のほうが深い話できるだろ
558:デフォルトの名無しさん
05/07/17 23:05:32
根拠がソースだけだと気持ち悪いのでマニュアルの記述を探してきた。
英語を面倒がらず、ソース読む前にマニュアルを読むべきだったな。>自分
URLリンク(www.gnu.org)
> 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
05/07/21 07:09:48
ちょっと愚痴らせてくれや
コンソールでscreen使ってソース書いてたんだけど
Xlibを使ったコードだったから、実験するためにtwm立ち上げて
そこでscreenをデタッチしてkterm上で実行してみたわけよ、でもなぜか
セグフォるの、調べてみたら
color_black = BlackPixel( disp, 0);
これでセグフォる
どう考えてもセグフォる部分じゃない
3時間ものすごい頭使って今まで考えたわけよ
pika----------nn!!!!!!!
もしかして、screenをデタッチしてやったからコンソールのときのなんかの変数受け継いでるのかな?
で、あたらしくkterm立ち上げてashで生で実行
‥‥‥‥‥‥‥‥‥‥
いけた‥‥‥‥
ほんと、今までの3時間なんだったんだろう‥‥
ごめん、 どうしても誰かにいいたかったの‥‥
560:デフォルトの名無しさん
05/07/21 07:33:36
あるマニュアル読んでたら
フォント名はコードに直書きするんじゃなくて
.Xresourcesに書けって書いてあるんだけど
なんで? 指定フォントの決め打ちなのにわざわざ書かせなきゃいけないの?
ってか、どうやって読み込めってんだよ
561:デフォルトの名無しさん
05/07/21 09:31:59
再コンパイルすることなく、
カスタマイズすることができる
562:デフォルトの名無しさん
05/07/21 09:45:40
>>559
環境変数を確認するのはことXWindowに関しては常道。
>>560
おまいさんもXWindowに関して基礎から勉強し直した方が…
563:デフォルトの名無しさん
05/07/21 10:58:37
XWindowの基礎なんて勉強しても無駄になることうけあい
564:デフォルトの名無しさん
05/07/21 11:09:11
身に付けて無駄になる基礎なんてない。
565:デフォルトの名無しさん
05/07/21 11:24:32
Xを使う以上、基本はXを知ることだと思うんだけど
Xの知識が無駄になるってどういうことなの?
また違うWindowSystem誰か作ったの?
566:560
05/07/21 11:46:10
ありがと
でも決め打ちだよ?
そのフォントじゃないと正しく動作しないの
それでも、やれっていうの?
567:デフォルトの名無しさん
05/07/21 12:07:51
今使ってるフォントに問題が発覚して
正しく動作する別のフォントに入れ替える必要が出てくるかもしれない。
とかね。
べつにローカルな使用だけでソースが手元にあって
いつでもコンパイルできるならなんでもいんじゃね?
568:デフォルトの名無しさん
05/07/21 12:29:23
>>565
「Xの仕事が無い」というだけのこと
569:565
05/07/21 19:43:12
お前らの人生全て仕事なんだ・・・
寂しいね
570:デフォルトの名無しさん
05/07/21 20:53:19
>>569
お、俺を一緒にするなよな? な?
571:デフォルトの名無しさん
05/07/21 21:11:20
うーん
でも仕事以外にXって使わないからなぁ・・・
572:デフォルトの名無しさん
05/07/21 21:58:54
家ではWindows使ってるって事?
573:デフォルトの名無しさん
05/07/22 07:56:56
>>559
> もしかして、screenをデタッチしてやったからコンソールのときのなんかの変数受け継いでるのかな?
「もしかして」じゃなくて調べろよ。
for i in `env | awk -F= '{ print $1 }'`; do (unset "$i"; ./a.out); done
どうせ全然違う原因だと思うが。
574:デフォルトの名無しさん
05/07/22 08:36:40
なにがしたいのかがまったくわからん
575:デフォルトの名無しさん
05/07/22 22:48:34
単に XOpenDisplay() に失敗していたけどエラーチェックして
なくて、disp == NULL で落ちてたってだけじゃないの?
576:デフォルトの名無しさん
05/07/30 11:01:11
C/C++質問スレから誘導されてきました。
子プロセスの標準出力と標準エラー出力を親プロセスで取りたいのですが、
たまに出力を取る部分で止まってしまいます。fgetsしているところで止まっている
ので、eofがくるまで待っているのか、とも思っているのですが・・・。
子プロセスの標準出力と標準エラー出力を別に取りたいので、forkしてパイプを
つなげる必要があると認識しています。
テストでつかったソースは以下のアップローダにupしました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
#main関数内で起動用のコマンド文字列を作っているのですが、
#このソースでは省略しています。
このような時、どうすればよいのでしょうか。どなたかご教授ください。
577:デフォルトの名無しさん
05/07/30 12:05:12
子側でstderrのバッファが満杯になってブロックされてんじゃないの?
578:デフォルトの名無しさん
05/07/30 12:19:30
selectかスレッドを使って読み出せ。
579:576
05/07/30 12:55:27
アドバイスありがとうございます。
> 577さん
バッファが満杯でブロックされてる場合は578さんが書いているように
1.スレッドで満杯になる前に逐次読み出してやる
2.selectでタイムアウトを設定する
という形でしょうか。
> 578さん
スレッドはぱっと調べた結果、手に負えそうもないので、selectについて調べてみました。
selectはファイルディスクリプタが読み書き可能になるまで待機して、準備できた場合は
1以上を返す、という理解でよろしいのでしょうか。
#上記のブロックされた場合はタイムアウトでbreakする?
selectを使って色々いじってみます。
580:デフォルトの名無しさん
05/07/30 14:49:47
select(2)やってみる前に、
とりあえずstrace -p PIDを全てに試してみたらどうなのよ?
# Solarisだとtruss
ありがちなのが、bugで誰も書いてないpipeを読んでいるケース。
581:576
05/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:デフォルトの名無しさん
05/07/30 19:37:43
>>581
>>579の時点で妥当な結論が出ているので580はさくっと無視するのが吉。
どうせあなたのプログラムも読んでない。
583:デフォルトの名無しさん
05/08/02 11:54:06
kernel2.6系で、システムコールをフックする方法を教えて下さい。
このページには2.4での方法が書いてありますが、2.6ではうまくいかないです。
URLリンク(www.atmarkit.co.jp)
上のページと同じように、sys_unameをフックするソースを晒して下さい!!
584:デフォルトの名無しさん
05/08/02 11:58:37
それくらい自分で調べられないお子ちゃまはおいたしちゃダメ。
585:デフォルトの名無しさん
05/08/02 12:37:43
>>583
LKM rootkit のソース読めばいいじゃん。
586:デフォルトの名無しさん
05/08/02 17:30:35
>> 585
kernel2.6では、結構大変そう。。。
カーネルのバージョン毎にrootkitの対応状況が異なる。
最新版カーネルで、フック&晒しよろろ。
2.6全般のシステムコールをフックするrootkitがあれば、教えてください。
587:デフォルトの名無しさん
05/08/02 19:24:43
>>586
いや、だから自分で読めよ。
588:デフォルトの名無しさん
05/08/04 02:23:45
>>586
straceは、すべて(!?)のシステムコールをフックしてるんじゃないか?
よくしらんがね。
589:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/08/04 16:09:35
>>589
いろいろ方法はないではないけどね。
ps出力相当の情報を拾ってきて、ppidがshのpidのプロセスを探すとか。
そもそも、なんでexeclp()でshを動かすのかが問題かな。
シェルを経由しないで直接動かせばいいじゃんと思うわけだ。
killハンドラで子供を殺すプロセスを中継に使うって手もあると思うし。
#まとめは歓迎。この件だけでもこのスレ全部でも、すきなだけやっちゃってくださいw
##で、アップロードはアップローダかどこかに。
591:デフォルトの名無しさん
05/08/04 17:39:38
>>588
んなことはない。
共通の入口と出口を抑えているだけでつ。
592:デフォルトの名無しさん
05/08/04 21:50:42
>>591
ltraceなんかは純然たるwrapperだわな。
>>589
sh -c 'exec command args'してみれば?
593:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/08/05 17:10:50
>>592
ltraceはwrapperじゃないよ。
stepモードで実行して、libcの関数の先頭アドレスにjumpした瞬間を拾って
スタック先頭から引数を拾って表示している。だから死ぬほど遅い。
wrapperにすると可変長引数に対応できないからな。
595:デフォルトの名無しさん
05/08/07 02:07:29
現在実行している環境が32ビットか64ビットか判別する方法を教えてください。
596:デフォルトの名無しさん
05/08/07 02:29:14
>>595
すべてのUNIXで共通して判別できる方法はありません
597:デフォルトの名無しさん
05/08/07 02:36:17
>>595
intの最大値を調べてみたら?
598:デフォルトの名無しさん
05/08/07 02:38:21
ILP64かもしれないし
599:デフォルトの名無しさん
05/08/07 02:39:03
違った
LP64かもしれないし(つーか普通そう)
600:デフォルトの名無しさん
05/08/07 03:16:51
sizeof(void*)
sizeof(long)
sizeof(int)
の結果を見て好きなように解釈すれ
601:デフォルトの名無しさん
05/08/07 03:22:37
お前らアホか?
CPUのことだろ?
dmesgでCPUみたらいいだろ
602:デフォルトの名無しさん
05/08/07 03:26:28
スレのテーマ的には実行中のプログラムが自分で判断する方法ということでは?
603:デフォルトの名無しさん
05/08/07 03:27:20
>>595
実行してる環境の「何が」32ビットか64ビットかによって判定法が異なる。
604:デフォルトの名無しさん
05/08/07 03:55:47
目的に応じてautoconfのマクロを自分で書けばよかろ
605:デフォルトの名無しさん
05/08/07 04:34:51
>>601
OSが64bitであろうと32bitであろうと、
実行環境のbit数は関係ないだろう。emulatorかもしれないんだし。
606:デフォルトの名無しさん
05/08/07 12:28:22
>>601
そもそも dmesg が入っているとは限らない。
607:デフォルトの名無しさん
05/08/07 12:47:21
uname -aはどうでしょう?
608:デフォルトの名無しさん
05/08/07 13:02:41
CPUを見ても32bitか64bitかなんて決定できないだろ。
両方のバイナリを実行できるOSもあるし。
>>600,603あたりがFAじゃねーの。
609:デフォルトの名無しさん
05/08/07 13:06:00
なんで600が?
610:デフォルトの名無しさん
05/08/07 13:16:35
>>609
結局603を間がえたあと
URLリンク(www.opengroup.org)
見たいな感じで600のようなことをすることになるわけで。
611:デフォルトの名無しさん
05/08/07 14:11:01
select() システムコールはどのような時に使用するのでしょうか?
簡単な解説があるサイトを紹介していただいても結構です。
612:デフォルトの名無しさん
05/08/07 14:13:02
URLリンク(www.linux.or.jp)
613:sage
05/08/07 14:17:31
ありがとうございます。
例をもとに、動作検証してみます。
614:デフォルトの名無しさん
05/08/07 14:18:12
>>611
ひとつのスレッドで同時に複数I/Oを実行したいとい
615:sage
05/08/07 14:37:06
ありがとうございます。>> 614
サンプルとか例などはありませんでしょうか?
616:デフォルトの名無しさん
05/08/07 14:45:35
URLリンク(www.linux.or.jp)
617:デフォルトの名無しさん
05/08/07 14:51:05
selectの掟とかあって、難しそうですが、
理解できるように努力してみます。
ありがとうございました。>> 614 616
618:デフォルトの名無しさん
05/08/07 17:05:00
ファイルからの入力を監視しつつ標準入力を受け付けるような応用はselect()で事が足りるね。
619:デフォルトの名無しさん
05/08/07 18:12:18
ファイルからの入力はselectしなくてもいつでも読み出し可能だろ
620:デフォルトの名無しさん
05/08/07 18:32:31
nfsやgmailfsでも?
621:デフォルトの名無しさん
05/08/07 19:12:58
>>620
理論上は
622:デフォルトの名無しさん
05/08/07 19:35:42
readがブロックすることと、readに時間がかかるのは別。
623:618
05/08/07 20:18:08
>>619
tail -f相当しながら標準入力をファイルに書き出すプロセスを実際に作った経験で書いたんだけど。
624:デフォルトの名無しさん
05/08/07 20:54:12
tail -f相当って普通に考えて現在のファイル末尾まで
読んだらEOF返るだろ
select()しても無駄なんじゃないの
そのへぼプログラムはポータブルに動くのか?
625:デフォルトの名無しさん
05/08/07 21:09:09
そうなんだ
ファイルがまだcloseしてないときでも
EOFが帰るのか
ちょっと試してみるか
626:618
05/08/07 21:14:50
>>624
いや、標準入力はEOFにならないんだけど。
627:デフォルトの名無しさん
05/08/07 21:35:00
なんか618がかわいそうになってきた。
628:デフォルトの名無しさん
05/08/07 21:41:54
>>627
いや、>>619と>>618が戦ってるだけだろ
>>618が標準入力とファイルを読む という話をしているのに対して
>>619がファイルは云々と標準入力のことを棚上げして
以降話がかみ合わないままなんだよ
629:デフォルトの名無しさん
05/08/07 21:48:25
>>626
標準入力はEOFにならないとしてもファイルはEOFになるんじゃないの?
一度EOFまで達したファイルディスクリプタって
その後書き込みがあったときに読み込み可能になるの?
標準入力はselectで待てるけど、ファイルは最後まで読み切ったら
selectのタイムアウト後に自分でseekしてみるしかないんじゃなくて?
それは別々な処理だし、selectで待つとは言い切れないんじゃない?
630:デフォルトの名無しさん
05/08/07 21:52:40
>>624
一旦EOFを返しても、そのファイルが拡大されれば、
その後のread(2)でデータが読める。select(2)もOK。
この仕様は4BSDが始めた。(たしかtail -fのために)
その頃のSystem Vは駄目だったけど、今これがダメなUNIXはないと思う。
www.opengroup.orgあたりはどういう風に言及しているのかな。
631:デフォルトの名無しさん
05/08/07 22:00:00
拡大されるまでは無限ループし続けるのか
そりゃずいぶんな実装だなw
632:630
05/08/07 22:08:03
GNUのtailなんかは再チェックのsleep時間を指定可能。
最近のUNIXはfile notificationがあるので、
(fcntl(2)のF_NOTIFY&DN_MODIFY)
こっちを使えば、いい場合もあるけど。(tail -fではみたことないけどね)
633:デフォルトの名無しさん
05/08/07 22:09:28
結局select()でtail -fを実装できないのは同じだな
どんなプログラムだったんだろう・・・見てみたい
634:デフォルトの名無しさん
05/08/07 22:18:15
>>632
EOFに達してもselect抜けるよね
EOFに達したあと、再度selectにつっこんだら
拡大されるまではブロックされるの?
635:デフォルトの名無しさん
05/08/07 23:16:39
まぁ最近じゃ tail -f は sleep なんかせずに kqueue を使って
スマートに実装されてる訳だが。
636:デフォルトの名無しさん
05/08/07 23:42:36
tail.c
URLリンク(www.freebsd.org)
637:デフォルトの名無しさん
05/08/07 23:57:54
該当部分はこっちだろ。
tail/forward.c
URLリンク(www.freebsd.org)
638:デフォルトの名無しさん
05/08/08 00:57:00
makefileの書き方で質問です。
makefileのあるディレクトリの下に、
Aというサブディレクトリと、Bというサブディレクトリがあり、
ここのサブディレクトリにもそれぞれmakefileがあります。
このとき、親ディレクトリからAとBの両方を一度にメイクするには
どのように書けば良いのでしょうか。
よく他人の作ったプログラムやLinuxのカーネルをメイクすると、
入ります ディレクトリ xxx
出ます ディレクトリ xxx
というような表示が出るのですが、その方法を教えてほしいです。
639:デフォルトの名無しさん
05/08/08 00:57:55
echoコマンドつかってるんじゃね?
640:デフォルトの名無しさん
05/08/08 01:02:24
>>638 make -C
スレリンク(tech板)
641:618
05/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:デフォルトの名無しさん
05/08/08 10:08:29
stdioとselectは混ぜるな危険。
バッファには先読みされてるがselectでは空という場合もあるぞ。
643:デフォルトの名無しさん
05/08/08 10:10:12
正直、>>618には失望した
644:デフォルトの名無しさん
05/08/08 13:22:16
setvbuf(f, _IONBF)やfflush()と併用すれば安全に使える状況も多い。
fscanf()あたりと使うのは絶望的。
645:618
05/08/08 18:52:10
失望されちった。
流石に標準入力は実際にはfgets()してません。
バッファリングしない一行入力関数を作ってそれを呼んでます。
#だから概略なんだってば。
646:デフォルトの名無しさん
05/08/08 20:04:39
FreeBSDまたはLinuxでpthreadを使用してメインスレッドとサブスレッド内で
sleep(3)を使おうと思ってるのですが、sleep(3)はスレッドセーフですか?
man(FreeBSDとLinuxの両方)を見たけどその記述が見つかりませんでした。
647:デフォルトの名無しさん
05/08/08 20:07:56
駄目だよ。SIGALRM使っているから。select(2)使いな。
648:デフォルトの名無しさん
05/08/09 01:20:09
>>647
SIGALRMでsleep(3)実装ってどんな化石OSの話でつか。
649:デフォルトの名無しさん
05/08/09 01:41:57
>>648
( ゚д゚) ポカーン
(´-`).。oO(わからないなら黙ってればいいのに…)
650:デフォルトの名無しさん
05/08/09 02:55:14
GUIプログラミングを学びたいのですが、どこから始めればいいでしょうか。
レベルはK&Rを読了です。
651:デフォルトの名無しさん
05/08/09 03:07:35
>>649
( ゚д゚) ポカーン
thread safeにするため最近のOSじゃalarmは軒並みnanosleepで実装されてるよ。
(´-`).。oO(じじいはひっこんでりゃいいのに…)
652:デフォルトの名無しさん
05/08/09 03:08:54
alarmじゃねえ、sleepだ。
大事なところで噛んだ。ちきしょう。
653:デフォルトの名無しさん
05/08/09 08:08:50
>>650
Xorg のソースあたりから
654:デフォルトの名無しさん
05/08/09 08:20:58
Cしか知らんのならXtかGTKのチュートリアルくらいしかGUIへのとっかかりは
ないんじゃないか?
655:デフォルトの名無しさん
05/08/09 08:46:06
Open Groupはsleep(3)のSIGALRMによる実装を許容。
URLリンク(www.opengroup.org)
ポータブルにしたいなら、sleep(3)は使わない方がいいね。
656:デフォルトの名無しさん
05/08/09 13:11:11
UNIXドメインソケットをつくってbindしたときにできる
ソケットファイルのパーミッションは 何で指定するの?
あとから 777 に変えたいときはどうしたらいいの?
system("chmod a+rw hoge");はかっこわるくてもうヤ
657:デフォルトの名無しさん
05/08/09 13:20:24
後からかえたいなら、fchmod(fd, 0777)。
出来ると同時に指定したいときは、umask(0)。
パーミッションを落すわけじゃないから、後でいいだろうね。
658:デフォルトの名無しさん
05/08/09 13:49:28
>>656
かっこ悪いというより、頭悪いな。
659:デフォルトの名無しさん
05/08/09 16:43:40
>>651
ようするに最近のOSはsleep(3)がスレッドセーフで実装されてるってことか?
660:デフォルトの名無しさん
05/08/09 21:39:20
>>659
つまりnanosleepで実装されてれば○。alarmで実装されてたら×。
移植性高めたいならselect使えということ。
661:デフォルトの名無しさん
05/08/09 22:09:01
nanosleep呼ぶ手も有ると思うが。
662:デフォルトの名無しさん
05/08/09 22:13:29
それでわざわざこんなこと書いてるのか
URLリンク(www.kt.rim.or.jp)
663:デフォルトの名無しさん
05/08/09 23:16:37
Winsockの流儀と移植性は別問題
664:デフォルトの名無しさん
05/08/10 00:23:08
>>660
usleep()で実装されていても駄目(な可能性がある)。
nanosleep()は、signal non-intrusiveであることが保証されている。
URLリンク(www.opengroup.org)
nanosleep()はPOSIXリアルタイム拡張。
665:デフォルトの名無しさん
05/08/10 01:07:24
FreeBSDやLinux等が今現在、どういう風に実装していようが、
やっぱ、Pthreadを使用してsleepしたいならselectかpollを使用するのが無難だな。
sleep(3)は、過去(pthreadが無い時代)の物との互換性維持の為にあるようなもんだろ。
666:デフォルトの名無しさん
05/08/10 02:11:22
POSIXのリアルタイム拡張か、出来ればアドバンスドリアルタイム拡張がないと、
pthread的には現代的なAPI設計とは言いがたいからね。
667:デフォルトの名無しさん
05/08/10 06:46:30
>>663
そもそもここUNIXスレだしな
WinsockならSleepが確実にあるはずだからそれ使えというのも分かるけど
668:デフォルトの名無しさん
05/08/10 09:11:37
>>662
それのさ、BSDソケット版というかUNIX版?みたいな感じのやつはある?
669:デフォルトの名無しさん
05/08/10 09:38:00
>>668
ネットワークプログラミングスレのテンプレへGO!
670:デフォルトの名無しさん
05/08/10 09:47:13
ptyの使い方を解説したページってある?
671:デフォルトの名無しさん
05/08/10 10:19:55
>>670
URLリンク(www.sony.co.jp)
あとはStevens本とか。
672:デフォルトの名無しさん
05/08/10 11:07:46
>>670
script(1)のソース。
URLリンク(svn.clkao.org)
673:デフォルトの名無しさん
05/08/10 11:08:50
それからopenpty(3)を使うこt。
674:デフォルトの名無しさん
05/08/10 22:38:25
errnoに自分で使う値を加えたいんですが、システムのerrnoと
値が衝突しないような方法はないでしょうか
675:デフォルトの名無しさん
05/08/10 22:41:11
ありません
676:デフォルトの名無しさん
05/08/10 23:06:02
大体、errnoに代入できるとは限らない。
関数呼び出しの可能性がある。with pthreadの場合。
URLリンク(www.opengroup.org)
677:デフォルトの名無しさん
05/08/11 00:42:57
左辺値に展開される関数だからどっちにしても代入できるだろ
678:デフォルトの名無しさん
05/08/11 01:29:24
>>676
そんなこといったら読み出しだって保証されませんよ?
679:デフォルトの名無しさん
05/08/11 11:16:56
誰も何も保障してくれないのか
680:デフォルトの名無しさん
05/08/11 12:16:26
誰も何も保障してくれない事は保障します
681:デフォルトの名無しさん
05/08/11 12:49:48
URLリンク(linas.org)
このページの要約お願いします
682:デフォルトの名無しさん
05/08/11 13:37:17
嫌です
683:デフォルトの名無しさん
05/08/11 18:06:23
Cursesとかで現在カーソルのある座標を取得する関数とかありませんか?調べていますがなかなか見つからない
684:デフォルトの名無しさん
05/08/11 18:07:24
>>683
環境はLinux、GCCです
685:デフォルトの名無しさん
05/08/11 18:10:28
>>683
マルチは氏ね
686:デフォルトの名無しさん
05/08/11 18:18:04
>>684=683
向こうに挨拶くらいしてから移動しろ。
cursesには現在座標を取得する関数は確かないから、
自前でどこにあるかを追跡し続ける必要があったと思う。
つーか、目的が判らんからそれ以上はなんとも言えん。
687:デフォルトの名無しさん
05/08/11 18:46:22
Linuxならncurses
getyxだろ?
688:デフォルトの名無しさん
05/08/11 18:54:31
cursesってまだ存在してるの?
正気?
689:デフォルトの名無しさん
05/08/11 19:13:10
>>688
aho
690:デフォルトの名無しさん
05/08/11 20:54:35
>>686
>>687
ありがとうございます。勉強になりました。
ファイラーを作ろうとしているのですがカーソルを押したときに座標を読み取ってどのファイルが選択されているかをチェックしようとしていました。試してみます。
691:デフォルトの名無しさん
05/08/11 21:34:45
>>688
え? Solaris ではデフォルトだけど。
692:デフォルトの名無しさん
05/08/12 00:42:13
実はマウスポインタの座標が欲しいんだったりしてw
693:デフォルトの名無しさん
05/08/12 02:20:28
ncursesならマウスも扱えるぜー!!!
694:デフォルトの名無しさん
05/08/13 15:56:40
メールの送信日時の欄にJSTなどのタイムゾーンが付加されますが
このタイムゾーンの文字列の取得方法を教えてください。
695:デフォルトの名無しさん
05/08/13 16:18:36
>>694
正規表現で抜けばいいんでないの?
696:デフォルトの名無しさん
05/08/13 17:39:22
>>694
time_t t = 1116908090;
printf("%s\n",localtime(&t)->tm_zone);
697:デフォルトの名無しさん
05/08/14 00:32:09
リモートコンピュータのCPU使用率の取得方法を教えてください。
698:デフォルトの名無しさん
05/08/14 01:28:55
>>697
リモート側でrstatd動かすとかsnmp使うとか
699:デフォルトの名無しさん
05/08/14 12:12:00
Cのプログラムで、
UNIX上で、とあるコマンドをどのユーザーが発行しても同一ユーザーが
発行しているようにさせたいのですが、どのようにすればいいのでしょうか?
自分で思いつくところだと、コマンドを発行させたいユーザが起動するデーモン
プログラムに、その他ユーザーが発行要求を投げて。デーモンはそれをSystem関数やら
何やらで発行して結果を返す。という感じで考えているのですが、
他に妙案ってありますでしょうか。
文章力無くてすみません
700:デフォルトの名無しさん
05/08/14 12:25:41
man chmod
701:699
05/08/14 12:44:24
>>700
返信ありがとうございます。
実行権を与える、というわけではなくてA、Xとユーザーが存在するならば、
Aがxxxを実行 →psで見るとxxxをAが実行していることになっている。
これを、
Xはxxx_daemonを起動しておく
Aがxxx_daemonを実行 → xxx_daemonからxxxをコール →psで見るとxxxをXが実行していることになっている。
という事がしたいのです。
702:デフォルトの名無しさん
05/08/14 13:44:30
man setuid
703:699
05/08/14 14:23:17
>>702
ありがとうございます。setuid使えばなんとかなりそうです。
お騒がせしましてすみませんでした。
704:デフォルトの名無しさん
05/08/15 09:42:45
プログラム上からディレクトリを作成する方法を教えてください
705:デフォルトの名無しさん
05/08/15 09:53:02
mkdir(2)
706:669
05/08/15 23:38:03
度々すみません。
早速レス頂いたとおりchmod ug+sでモジュールに権限つけたら上手くいったのですが、
該当モジュールがシェルで、中でコマンド発行している場合はユーザが元のユーザで実行
している扱いになってしまいます。(man chmodでもそう書かれていたのですが)。
これを回避する方法ってありますでしょうか?
707:デフォルトの名無しさん
05/08/16 00:02:38
なんで派生して自分で考えようとは思わないの?
ってかなんでそっちなんだ?
708:デフォルトの名無しさん
05/08/16 01:21:32
man setuid
709:デフォルトの名無しさん
05/08/16 10:12:28
C言語で現在の時間を変更する関数を教えてください
710:デフォルトの名無しさん
05/08/16 10:17:02
settimeofday
711:デフォルトの名無しさん
05/08/16 10:18:30
man man
712:デフォルトの名無しさん
05/08/16 10:21:46
>>709
限りなく光速に近い速度で移動する
713:デフォルトの名無しさん
05/08/16 10:40:23
co というコマンドの使い方を教えてください
714:デフォルトの名無しさん
05/08/16 10:50:35
まずci
715:デフォルトの名無しさん
05/08/16 12:34:42
>>713
man co だろ。はいはいワロスエロス
716:デフォルトの名無しさん
05/08/16 14:47:45
>>713
限りなくco速に近い速度で移動する
717:デフォルトの名無しさん
05/08/16 15:56:27
そんなco息な答えを
718:デフォルトの名無しさん
05/08/16 22:16:53
coこはくだ質なインターネッツですね
719:669
05/08/17 00:10:13
>>707
>>708
結局所有者rootのCモジュールにug+s、で、その中でsetuidしてsystem関数をコールさせることで
落ち着きました・・・まだ実機で確認取れてないんですが(汗
アドバイスありがとうございました(感謝
720:デフォルトの名無しさん
05/08/17 01:45:51
>>719
まぁそういう場合はsudo使うと楽なのだが。
721:デフォルトの名無しさん
05/08/17 10:22:21
make clean:
に、rm *.oと書いているんですが、
*.oがひとつもない時はエラーになってしまいます。
エラーを出さないようにするにはどうしたらいいんですか?
722:デフォルトの名無しさん
05/08/17 10:26:16
-rm
rm -f
723:デフォルトの名無しさん
05/08/17 12:17:02
山ほどあるほかのソフトでどうやってるかというのを見る気はないのか
724:デフォルトの名無しさん
05/08/17 21:04:09
山ほどゴミコマンド作って悲しくないのか
725:デフォルトの名無しさん
05/08/17 21:37:44
/usr/local以下にある限り問題ない
726:デフォルトの名無しさん
05/08/18 08:25:38
>>721
たぶんあなたのしたいのはこういうこと。
エラーになっても、makeが無視して続行するようにする。
URLリンク(www.gnu.org)
727:デフォルトの名無しさん
05/08/18 08:27:22
あと、cleanターゲットの時は、.PHONYも参照のこと。
728:デフォルトの名無しさん
05/08/19 23:44:09
UNIXプログラミングされておられる方って、Xは使わずコンソール画面でソース書いておられるのでしょうか?
もしくは、cygwinなんかを使ったり。。
貴方の最適環境を教えてちょ
729:デフォルトの名無しさん
05/08/19 23:52:02
Xは使う。但し、端末エミュレータを動かすのが主目的。
X端末でなければ当然telnet端末だったりするわけだから、
通常GUIの開発でもない限り端末エミュレータ上でmuleを動かしている。
730: ◆i6G.jsz.NY
05/08/20 00:34:08
うちも基本的にX使ってる
理由は、自由に日本語を表示/入力したいのと、いっぱい行を表示させたいの
ちょっと、コード書いたり使うくらいならコンソールでもやるけどね
>もしくは、cygwinなんかを使ったり。。
これだと、Windowsプログラミングにならないかね?
自分は、
kterm 6.2.0 custom
kinput2 version 3.0 (1999/05/26)
Canna Server (Ver. 3.6)
gcc 3.3.3 custom
VIM - Vi IMproved 6.3 custom
XFree86
ってかんじかな。
細かいのはおいとくけど
731:デフォルトの名無しさん
05/08/20 01:25:55
>>728
X は使うけど、起動してるのは全画面表示の mlterm と Emacs。
Emacs だけ端末エミュレータで起動してるのは、elscreen と screen で
キーバインドがゴッチャになって混乱するから。
やってる作業自体に本質的に必要ってわけではない。たまに Flash 見たり
するのに Firefox 起動するとか、そんなもんじゃねーかな。
732:デフォルトの名無しさん
05/08/20 02:02:28
ちょwwwっおまwwww
Cannaとかまだあったんか
733:デフォルトの名無しさん
05/08/20 04:12:24
一応ね
使っている人がいるから保守が続いているけど
新規にインストールする人は年々減ってる
734:デフォルトの名無しさん
05/08/20 08:34:57
XEmacs, gnuserv
gnome-terminal, screen, gnuclient, ssh
eclipse (with/without emacs plugin)
Xcode (Mac OS X)
不思議なもんで、screenがあっても、
gnome-terminalのtabは使うし、virtual desktopも使う。
735:デフォルトの名無しさん
05/08/20 14:54:51
ふつーSKK
736:デフォルトの名無しさん
05/08/20 18:16:01
ふつーATOK
737:デフォルトの名無しさん
05/08/22 00:18:35
俺は SJ3 使ってますがなにか?
738:デフォルトの名無しさん
05/08/22 00:20:17
べつに。
739:デフォルトの名無しさん
05/08/22 19:01:11
Winから見ると古代遺跡が稼動してる幹事
740:デフォルトの名無しさん
05/08/22 19:03:25
Winの様に進化ではなく、停滞してる証
741:デフォルトの名無しさん
05/08/22 20:04:27
進化・・・ってどこ?
742:デフォルトの名無しさん
05/08/23 12:14:30
テンポラリディレクトリの取得方法を教えてください
743:デフォルトの名無しさん
05/08/23 12:18:51
mktemp
744:デフォルトの名無しさん
05/08/23 13:41:57
mktemp(3) なんて使っているやつはばかです。
745:ばか
05/08/23 14:33:32
すみません
746:デフォルトの名無しさん
05/08/23 20:23:01
tmpnam()
747:デフォルトの名無しさん
05/08/25 07:07:18
CPUに関する情報はどのように取得したらよいのでしょうか?
特にクロック数を取得したいのですが。
環境はOpteron、Fedora Core4、gcc4.0.0です。
マシンはいくつかあって、CPUのクロックが違います。
748:デフォルトの名無しさん
05/08/25 07:50:27
どっかで見たことあるな・・・
メモリ情報とかいっぱいあるフォルダに入ってた悪寒
ごめんドコかはわからんorz
749:デフォルトの名無しさん
05/08/25 08:04:03
>>747
cat /proc/cpuinfo
fopen("/proc/cpuinfo", "r")
750:デフォルトの名無しさん
05/08/25 13:26:00
フォルダねえ。
751:デフォルトの名無しさん
05/08/25 15:34:16
なんだよ
752:デフォルトの名無しさん
05/08/25 15:36:59
er には伸ばし棒(ー)をつけて下さい。
スレリンク(tech板)
753:デフォルトの名無しさん
05/08/25 19:01:05
UNIXならディレクトリでしょ。
754:デフォルトの名無しさん
05/08/25 20:07:21
ディレクトリ → おたく
フォルダー → 一般人
755:デフォルトの名無しさん
05/08/25 20:10:14
さすがにそれでは釣れないぞ
756:デフォルトの名無しさん
05/08/25 20:56:33
みなさんがUNIXでC++を書くとき、
標準ライブラリのリファレンスは何を参照していますか?
manのようにUNIX環境でさくっと参照できる資料はないもんでしょうか。
757:デフォルトの名無しさん
05/08/25 21:04:01
JISX3014
758:デフォルトの名無しさん
05/08/25 21:08:39
C++なんて書きません。
759:デフォルトの名無しさん
05/08/25 21:23:20
>>756
無い
あきらめろ
760:デフォルトの名無しさん
05/08/25 22:07:01
>>756
X3J16-96がhtmlになっているのをnamazuで検索。
ぐぐれば転がっている。
1997 C++ Public Review Document
もっと新しいのでhtmlになっているのある?
761:デフォルトの名無しさん
05/08/25 22:07:52
>>760
> X3J16-96が
これはよぶん。省略してちょ
762:デフォルトの名無しさん
05/08/25 22:10:31
おれここよく見てるw
ちょろっと思い出すにはお手軽。
URLリンク(www005.upp.so-net.ne.jp)
763:デフォルトの名無しさん
05/08/26 10:23:48
自分自身の実行パスの取得方法を教えてください
764:デフォルトの名無しさん
05/08/26 10:34:40
>>763
argv[0] …か?
765:デフォルトの名無しさん
05/08/26 10:38:05
>>763
その話題は荒れるからよせw
766:デフォルトの名無しさん
05/08/26 16:51:12
>>764
>>3の1.14
767:デフォルトの名無しさん
05/08/27 22:30:46
C++相談室 part43から誘導です。
Fedora Core 2でUSB<->Serial変換を使って制御をやっています。
C++で自前のclassですが、基本はCのread()とwrite()を使ってのやり取りです。
Win 2kのハイパーターミナルで通信するのに比べると、
FC2でreadする動作速度が遅いようです。
何かreadを高速化させる方法と言うのがあるんでしょうか?
タイミングの問題でしょうか。
使用している装置は内部にFTDIのUSBのチップが載っています。
768:デフォルトの名無しさん
05/08/28 00:23:03
>>767
stty
769:デフォルトの名無しさん
05/08/28 01:37:24
>>768
えーと、sttyでbaud rateを変更せよ、という事でしょうか。
出来ればもう少し詳しくお願いします。
自分の書き方が悪かったのですが、
読む量は非常に少なく、read()1回あたりに数characterです。
read()を実行してから、読み始めるまでが遅い印象です。
ちゃんと計測していませんが、read()1回にコンマ数秒かかっています。
770:デフォルトの名無しさん
05/08/28 02:15:49
openからreadまでのソースをさらした方が早いと思う。
tcgetattr、tcsetattr、cfsetispeed、cfsetospeedあたりを駆使してください。
ただ、ハードウェアやドライバの問題の可能性もあります。
771:767
05/08/28 02:43:53
ちょい長いですが、かいつまんで晒します。
Class名は晒すとまずいので、myClassにします。
int main(){
myClass mon("/dev/usb/ttyUSB0");
mon.Open();
(略)機器特有の設定のみ。この時点でread()を使っても遅いので、
ここでの設定は細かく晒しません。
cout << mon.ReadVoltage() << "¥t" << mon.ReadCurrent() << endl;
return 0;
}
mainを短くするとこんな感じ。
ちなみに、FTDIのチップというのは、Linux 2.4.20以降に標準でデバドラが入ってます。
772:767
05/08/28 02:53:55
続き
myClass::myClass(string deviceName)
: RS232C(deviceName)
{
SetIOSpeed(B115200);
SetDelimiter(MAC);
}
RS232C::RS232C(string deviceName)
: fDeviceName(deviceName)
{
fFileDescriptor = -1;
SetDefault();
}
myClassはRS232Cというclassを継承してます。
773:767
05/08/28 02:55:59
先のSetDefault()の内部は、
void RS232C::SetDefault()
{
SetDelimiter(WIN);
fInputSpeed = B9600;
fOutputSpeed = B9600;
fSleep = 0;
struct termios tmp;
fOptions = tmp;
UnsetIflag(INPCK | ISTRIP);
UnsetIflag(IXON | IXOFF | IXANY);
UnsetOflag(OPOST);
SetCflag(CLOCAL | CREAD);
UnsetCflag(PARENB);
UnsetCflag(CSIZE);
SetCflag(CS8);
UnsetCflag(CSTOPB);
UnsetCflag(CRTSCTS);
UnsetLflag(ICANON | ECHO | ECHOE | ISIG);
SetCc(VMIN, 0);
SetCc(VTIME, 10);
SetInputSpeed(fInputSpeed);
SetOutputSpeed(fOutputSpeed);
SetTermios(fOptions);
}
です。
delimiterとbaud rateは後で変更しています。
774:767
05/08/28 02:58:38
続き
string RS232C::Read() const
{
string line = "";
char buf[100];
while(1){
int size = read(fFileDescriptor, &buf, 100);
if(0<size && size <=100){
line += buf;
} else {
break;
} // if
} // while
return line;
}
Read()はこんなです。
自分の通常使用では100文字を超えるようなread()の結果はないので、
100で一旦区切ってます。
775:767
05/08/28 03:05:22
以上ですが、
問題があるとすればread()の使い方か、
もしくは>>773の設定内容でしょうか。
SetCflag(CLOCAL | CREAD);
などは、
void SetCflag (int flag){ fOptions.c_cflag |= flag;}
などという関数を呼んでいます。
ちなみにcode内でfで始まっている変数はmember変数です。
長いですが、よろしくお願いします。
職業柄、宇宙の神秘の解明に繋げます。
776:デフォルトの名無しさん
05/08/28 03:25:55
動作中に stty -a -F /dev/usb/ttyUSB0 した結果見して。
777:767
05/08/28 03:42:01
>>776
speed 115200 baud; rows 0; columns 0; line = 244;
intr = t; quit = M-r; erase = M-~; kill = M-^¥; eof = R; eol = I; eol2 = ^M;
start = s; stop = M-r; susp = M-~; rprnt = L; werase = ^C; lnext = M-<;
flush = M-^]; min = 0; time = 10;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel
-opost -olcuc ocrnl onlcr -onocr -onlret ofill -ofdel nl0 cr1 tab0 bs1 vt0 ff1
-isig -icanon iexten -echo -echoe echok echonl -noflsh -xcase tostop -echoprt
-echoctl -echoke
です。
778:767
05/08/28 03:45:58
あ、以下の内容を書き忘れていました。
void RS232C::Open()
{
fFileDescriptor = open(fDeviceName.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fFileDescriptor, F_SETFL, 0);
SetTermios(fOptions);
}
779:デフォルトの名無しさん
05/08/28 05:14:30
>>777
特殊文字の設定がでたらめだな。
780:デフォルトの名無しさん
05/08/28 06:40:16
本題と関係ないだろうけど
if(0<size && size <=100){でいいの?
781:780
05/08/28 06:40:50
あ、いいんだゴメン
782:デフォルトの名無しさん
05/08/28 10:22:27
>>777
なんかぐちゃぐちゃだな。cfmakeraw で raw モードにしてみれ。
783:767
05/08/28 12:17:58
>>782
>>773の
fOptions = tmp;
の後ろに
cfmakeraw(&fOptions);
を追加しました。その状態で、
>>776を打つと、
speed 115200 baud; rows 0; columns 0; line = 180;
intr = M; quit = M-q; erase = M-~; kill = M-^¥; eof = r; eol = I; eol2 = ^M;
start = L; stop = M-q; susp = M-~; rprnt = L; werase = ^C; lnext = M-<;
flush = M-^]; min = 0; time = 10;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
-ixoff -iuclc -ixany -imaxbel
-opost -olcuc ocrnl onlcr -onocr -onlret ofill -ofdel nl0 cr1 tab0 bs1 vt0 ff1
-isig -icanon -iexten -echo -echoe echok -echonl -noflsh -xcase tostop -echoprt
-echoctl -echoke
となります。まだ実行速度は変わりません。
784:デフォルトの名無しさん
05/08/28 15:20:55
>>783
だめか。
というかどうやって計測してる?単にreadがブロックしてるだけじゃないよな。
それでも遅いなら、linuxのデバドラあたりの問題な気がする。つづきは犬板かなぁ。
785:デフォルトの名無しさん
05/08/28 18:00:16
>>784
>単にreadがブロックしてるだけじゃないよな。
open()でO_NDELAYしてるみたいだけど..
786:デフォルトの名無しさん
05/08/28 18:44:12
linux-2.4のFTDIなシリアルドライバはクソなので、
そういうものだと思ってあきらめた方がいいかもしれない。
遅いだけならともかく、負荷をかけるとデータ取りこぼして使いものにならん。
787:デフォルトの名無しさん
05/08/28 19:20:59
2.6系の最新の物にすべし。
メジャーなカーネルハカーは、もはや2.4系など弄って無い
788:デフォルトの名無しさん
05/08/29 01:48:24
2.6からディバイスドライバがコンパイラだけで生成できなくなってめんどくさい
789:デフォルトの名無しさん
05/08/29 02:22:06
USBでない普通のシリアルで試してみると
問題が切り分けられたりするんではないだろうか。
790:デフォルトの名無しさん
05/08/29 13:46:47
>>788
めんどくさいなら最初からやるな
791:デフォルトの名無しさん
05/08/29 14:31:40
はいはいウザスウザス
792:767
05/08/29 15:02:57
ご回答ありがとうございます。
>>786-787
uname -rの結果は、
2.6.5-1.358smp
です。FC 2を使っています。
>>784
>readがブロックしてる
これはどういう意味でしょうか。
793:デフォルトの名無しさん
05/08/29 19:42:42
自分で調べるっという選択肢は無いのか?
794:デフォルトの名無しさん
05/08/30 13:38:35
一から十まで用意してもらうのが当たり前な世代なんじゃないの。
795:デフォルトの名無しさん
05/09/01 12:52:13
おい、実行ウファルのパスはどーやって調べるんだよ
796:デフォルトの名無しさん
05/09/01 13:02:56
うふぁる?
797:デフォルトの名無しさん
05/09/01 13:51:32
Linuxだったらreadlink("/proc/self/exe", buf, bufsize)
798:デフォルトの名無しさん
05/09/01 21:11:53
whereis ?
799:デフォルトの名無しさん
05/09/02 02:14:04
実行ウファルは既に消されてウファルシステムから見えなくなっている可能性もあるわけだが
800:デフォルトの名無しさん
05/09/02 08:04:20
そこまで責任もてん
801:デフォルトの名無しさん
05/09/02 16:30:20
ps で出ている実行ウファルの場所を調べる方法ある?
httpd とかさぁ。
802:デフォルトの名無しさん
05/09/02 16:33:09
>>801
プロセスって実行ファイルに結びついてるもんなの?
803:デフォルトの名無しさん
05/09/02 16:53:34
>>802
forkしたプロセスを実行ファイルと結びついてると解釈できるかどうかによるな
804:デフォルトの名無しさん
05/09/02 16:55:54
料理とレシピ
805:デフォルトの名無しさん
05/09/02 17:02:44
クラスとインスタンスとか
806:デフォルトの名無しさん
05/09/02 20:43:59
pid 1の実行ウファルって何?
807:デフォルトの名無しさん
05/09/02 20:48:40
うちのに限って言えば /sbin/init
808:デフォルトの名無しさん
05/09/02 23:44:58
実行した後すぐ削除って出来る?
なんか怒られるときがあるけど
URLリンク(58.156.48.133)
809:デフォルトの名無しさん
05/09/03 00:53:10
↑ エロ注意
810:デフォルトの名無しさん
05/09/03 01:54:07
>>808
Cygwinでなければunlinkによる削除はできる
上書きはEBUSYエラーでできない
811:デフォルトの名無しさん
05/09/03 01:57:59
>>810は嘘
812:デフォルトの名無しさん
05/09/03 03:36:31
>>808
削除(unlink)はできる。unlinkしてもディレクトリからウファル実体への
参照が消えるだけで、実行中プロセスがウファルを参照しているので、
ウファル実体はまだウファルシステムからは消えない。
実行プロセスが終了して他にそのウファルを参照しているプロセスも
なくなったら、ウファル実体は参照数ゼロになるので消滅する。
cp等による上書き(単にオープンして書き込む)はウファル実体を
変更することになるので、エラーになる。
(OSによってはエラーにならないが実行中のプロセスに致命的な結果を生じる)
ウファルをインストールするときにcpでなくinstallコマンドを使うのは
一つにはこのためで、まずunlinkしてからウファルを作成するようになっている。
813:デフォルトの名無しさん
05/09/03 08:51:21
ウファルてなに?
814:デフォルトの名無しさん
05/09/03 09:15:56
ウファル の検索結果 約 458 件中 1 - 10 件目 (0.39 秒)
白髪染めクリームらしい
815:デフォルトの名無しさん
05/09/03 09:39:09
あるテキストファイルを複数のプログラムから同時にアクセスする可能性があるのですが、ファイルロックの方法を教えてくだされ。
また、書き込みブロックされた際に、ロックが解放されるまで待つようにするにはどのようにするのがよいでしょうか?
816:デフォルトの名無しさん
05/09/03 09:40:29
flock
817:デフォルトの名無しさん
05/09/03 09:50:47
>>816
よりによってflockかよ…
lockf(3)かfctrl(2)を。
fctrlはF_GETLK, F_SETLK, F_SETLKW
818:デフォルトの名無しさん
05/09/03 09:54:06
いっそファイル名を変えてしまえ。
819:デフォルトの名無しさん
05/09/03 10:22:14
fctrl(笑)
820:デフォルトの名無しさん
05/09/03 10:31:28
man 笑 fctrl
821:デフォルトの名無しさん
05/09/03 12:00:02
fcuk
822:デフォルトの名無しさん
05/09/03 13:49:04
>>812
サンクスコ
実行中でのウファルの振る舞いが完全理解できたよ
823:デフォルトの名無しさん
05/09/03 14:18:22
完全に理解(笑)
824:デフォルトの名無しさん
05/09/03 14:24:28
もはや(w)はなんとも思わなくなったけど、
逆に(笑)がけっこうムカツクことに気づいた。
時代は変わったということだな。
825:デフォルトの名無しさん
05/09/03 14:36:50
そういえばpsで見える実行ウファルのパスはどうやって調べてるんだ?
argv[0]なの?
826:デフォルトの名無しさん
05/09/03 14:38:43
>>817
そうは言うが、ではしつこく残ってるflockの存在意義って何よ?
827:デフォルトの名無しさん
05/09/03 14:41:58
>>826
backward compatiblityってやつじゃないの。
828:デフォルトの名無しさん
05/09/03 18:54:51
>>826
flock(2)は*BSDで独自の発展をとげているし、(4.2BSDの頃から仕様が変わっている)
POSIX等で標準化されてないから、OSを超えたポータビリティはないと思ってくれ。
ロックしたファイルをclose(2)したり、dup(2)したり、
プロセスが終了したり、fork(2)したり、execve(2)したりした時の振る舞い。
FreeBSDのマニュアルは、POSIX fcntl(2)のロックの意味を、
stupidと言っているが、標準であることの意味は大きい。
問題とされているところを、回避するような実装を行えばいいだけだから。
URLリンク(www.freebsd.org)
FreeBSDはflock(2)がefficientであると言っているから、
#ifdef FreeBSD
#error "....."
#endif
なソースでflock(2)するのは、いい場合もあるんじゃないかと思うが。
829:デフォルトの名無しさん
05/09/04 00:11:21
fcntlの振る舞いは本当にstupidだと思う
830:デフォルトの名無しさん
05/09/04 01:18:15
なにそのunix会話
831:デフォルトの名無しさん
05/09/04 08:41:32
flock()はBSD系で、lockf()/fcntl()はSysV系
両方使える人は好きなほう使えばいいじゃん。ってことっしょ
832:デフォルトの名無しさん
05/09/04 11:20:29
BSDって、もしかしてUNIXの足引っ張ってる?
833:デフォルトの名無しさん
05/09/04 12:20:24
はい
834:デフォルトの名無しさん
05/09/04 19:57:15
はいじゃないが
835:デフォルトの名無しさん
05/09/05 10:53:20
>>832
唯我独尊&孤立無援状態
836:デフォルトの名無しさん
05/09/05 15:07:32
自分自身のnice値の取得方法を教えてください
837:デフォルトの名無しさん
05/09/05 15:56:29
getrusage(RUSAGE_SELF, &ru)
838:デフォルトの名無しさん
05/09/06 07:00:57
URLリンク(www.linux.or.jp)
これを見てみたのですが、どれがnice値に相当するのでしょうか?よろしくお願いします。
839:デフォルトの名無しさん
05/09/06 07:30:26
人に教えれるほど知識無いけど
ググったらgetpriorityが見つかったけど違う?
840:デフォルトの名無しさん
05/09/06 08:35:10
>>837は間違い。
>>839は正しい。
841:デフォルトの名無しさん
05/09/06 18:36:04
調べしないででスミマセンが、ワードがまったく検討がつかないのでお願いします。。
普通Windowsアプリケーションは、
Win32APIやDirectXのAPI郡などのMSが提供している関数を用いて作ってるのですが。
主にFedoraCoreやVineではこれらと同じような、もしくは頑張れば表現可能なAPI郡は存在するのでしょうか?
842:デフォルトの名無しさん
05/09/06 18:39:24
てかすぐ出てきちゃいましたΛllΛ
Gtk+なるSDKがあるのですね、、
ちと勉強してきます
843:デフォルトの名無しさん
05/09/06 20:23:35
>>842
WindowsっていうOSは、ウィンドウシステムも含んでリリースされています。
でも、一般的にUNIX系のOSは、ウィンドウシステムは含まれていません。
使いたい人が使いたいウィンドウシステムを使えばいいという考え方です。
(とは言え、X以外のウィンドウシステムってあんまり聞きませんが。)
ゆえに、ウィンドウシステムに対するAPIも1つではなく、さまざまな種類が
存在しています。(XというウィンドウシステムのAPI:ツールキットも様々な
種類があります。)
Gtk+もその一つにすぎません。
と言うことを念頭においておかないと、せっかく覚えたのに、数年後には
だれもつかっていない過去の遺物となってしまうかも知れません。
844:デフォルトの名無しさん
05/09/06 20:37:07
GTK+はダメだよ
Xtを使うのが普通
845:デフォルトの名無しさん
05/09/06 21:03:19
gtk+で問題なし。ただ
> Win32APIやDirectXのAPI群
に相当するものではないけど。
846:デフォルトの名無しさん
05/09/06 21:21:33
>>821
X自体がセキュリティもアクセラレータもなんもない地雷環境なので、
世にある窓マネージャは例外なくスナップショットの画像で誤魔化してます。
Gtk+もその1つで、実際の動作を見るとその醜さに驚かされるでしょう。
>>844
UNIXでGUIなんてダメだよ
Windowsを使うのが普通
847:デフォルトの名無しさん
05/09/06 21:27:53
さくら、それを言っちゃあお仕舞いよ。
848:デフォルトの名無しさん
05/09/06 21:44:10
GNUStep最強
849:デフォルトの名無しさん
05/09/06 21:57:05
>>846
DRI じゃダメなのか?
850:デフォルトの名無しさん
05/09/06 21:58:29
>>846
> X自体がセキュリティもアクセラレータもなんもない地雷環境なので、
無知蒙昧だな。
851:デフォルトの名無しさん
05/09/06 22:25:24
そこでlg3dの出番ですよ。
852:デフォルトの名無しさん
05/09/06 22:39:55
Xのセキュリティはxhost, xauthがあるし、
アクセラレーションなら MIT SHM拡張があるし
853:デフォルトの名無しさん
05/09/06 22:46:51
xhostwwwwwwww
854:デフォルトの名無しさん
05/09/06 22:53:13
>>852
acceleration つったら普通は h/w acceleration じゃない?
↓ここが参考になるかも。
Xの描画が一番速いグラフィックカードってどれ?
スレリンク(linux板)
855:デフォルトの名無しさん
05/09/07 01:54:38
詳解UNIXプログラミングって本買ったんですけど、
C言語で組むのとどう違うのか、本質が理解できません。
目の覚めるようなご教授をお願いします。
なるほどー、というようなやつで。
856:デフォルトの名無しさん
05/09/07 02:00:03
Cしたい
857:デフォルトの名無しさん
05/09/07 02:09:51
>>855
おまえには無理
858:デフォルトの名無しさん
05/09/07 02:12:34
そういう受け答えは飽きたので、レスするのは本当の答えを知っている人だけで結構ですから。
859:デフォルトの名無しさん
05/09/07 02:15:09
質問の意味が理解できないからそんな人はいないかと(笑)
860:デフォルトの名無しさん
05/09/07 02:41:17
C言語云々は ANSI C のみでという事か?
自分の居場所を説明出来ないヤツに道案内するのはしんどいからパスだな。
861:マイク ◆yrBrqfF1Ew
05/09/07 02:41:37
ハードウェアは変更しづらいから
遅いけど変更しやすいソフトウェアがあるはずだが
そのソフトウェアに合わせてハードを選ぶのは本末転倒だよな?
862:デフォルトの名無しさん
05/09/07 03:38:01
>>855
違わないと何か困るの?
>>861
日本語不自由なんだね。ちゃんと勉強しないと高校行けないよ。
863:デフォルトの名無しさん
05/09/07 03:46:25
ファイルがすでに存在するかどうかを確認するにはどのようにしたらよいのでしょうか?
864:デフォルトの名無しさん
05/09/07 03:50:35
目視で確認すればいいだけじゃん
865:デフォルトの名無しさん
05/09/07 03:54:31
ワロタ
866:デフォルトの名無しさん
05/09/07 04:06:25
目視は疲れるからなあ。俺なら人に訊くね。
867:デフォルトの名無しさん
05/09/07 04:16:29
プログラムからコマンド例えばlsを発行してその結果をプログラムに取り込む方法を教えてくだすれ
868:マイク ◆yrBrqfF1Ew
05/09/07 04:26:50
よく知らんがパイプとか標準出力等をdupったりすんじゃないのか。
869:デフォルトの名無しさん
05/09/07 04:27:55
よくしらないのにレスするな
870:デフォルトの名無しさん
05/09/07 04:28:26
system とか popen とか
871:デフォルトの名無しさん
05/09/07 04:51:03
APUEをちゃんと嫁
872:デフォルトの名無しさん
05/09/07 04:58:20
open(2)してみれば分かる。
なければ、エラーか、新規作成かは第二引数で選ぶことができる。
873:デフォルトの名無しさん
05/09/07 11:46:11
>>867
よくしらんが、GUIならコピー&ペーストという手がある。
874:デフォルトの名無しさん
05/09/07 12:07:11
>>873
どんなプログラム書けばいいんですか?
875:デフォルトの名無しさん
05/09/07 12:11:53
teratermでログインすりゃログ取れるでしょ
それと同じようにすればいい
876:デフォルトの名無しさん
05/09/07 12:17:53
>>875
詳しく
877:デフォルトの名無しさん
05/09/07 12:38:00
結論:>>863 に見合った方法など ない
878:デフォルトの名無しさん
05/09/07 13:12:09
>>877
いや、>>872だから。
>>867は、>>870のpopen(3)。
879:デフォルトの名無しさん
05/09/07 13:44:51
UNIXはまともなファイラーがない時点でクライアントとして終わってる
emacs使ってるキモイ奴は困らないだろうけど
fdcloneの入ってない環境はクソ
880:デフォルトの名無しさん
05/09/07 13:45:57
>>879
ワラタ
881:デフォルトの名無しさん
05/09/07 13:47:03
emacs持ち出すまでもなく、お好きなシェルでええやん(笑)
882:デフォルトの名無しさん
05/09/07 13:52:20
>>881
おまえ、タイプ量考えろよ
おれはファイル選択はカーソルキー以外使いたくないの
883:デフォルトの名無しさん
05/09/07 13:57:23
UNIXは唯一telnetとかでリモート操作できるのは評価してやるが
GUIはクソ
コピペもまともにできないXサーバーなんて入れるかっつーの
おれはteratermで十分
けどCUIのファイラーがfdcloneしかないのはマジでクソ
884:デフォルトの名無しさん
05/09/07 13:58:47
>>883
ファイラって便利?
885:デフォルトの名無しさん
05/09/07 13:59:03
シェルはDOSよりずっとまともなワイルドカード使えるし
正規表現つかえるツールもいっぱいあるやん。
肌に合わないなら無理してUnix使うなよ(笑)
886:デフォルトの名無しさん
05/09/07 14:02:00
PIP.COMがないと話にならん。
今でも8インチ片単に入れて持ち歩いている。
887:デフォルトの名無しさん
05/09/07 14:03:39
海胆糞板逝け
888:デフォルトの名無しさん
05/09/07 14:06:09
うむ、PIPはけっこう良かった。
889:デフォルトの名無しさん
05/09/07 18:42:10
>>882
指の本数足りない人は大変だね
890:デフォルトの名無しさん
05/09/07 21:23:50
じゃぁ俺、秀吉。
891:デフォルトの名無しさん
05/09/07 21:35:07
>>890
大杉。
892:デフォルトの名無しさん
05/09/08 11:18:54
vimのようにスクリーン全体を書き変えるようなプログラムの画面出力を得るにはどうしたらよいのでしょうか?
893:デフォルトの名無しさん
05/09/08 11:52:01
vram上のデータをファイルに書きだせばいい。
894:デフォルトの名無しさん
05/09/08 11:55:49
>>892
・画面のイメージが欲しい。
・画面全体を文字列として取得したい。
・vimの出力するコントロールシーケンスを取得した。
どれ?
895:デフォルトの名無しさん
05/09/08 12:17:45
>>894
二番目か三番目です。そのへんも良くわからないもので…
896:デフォルトの名無しさん
05/09/08 12:20:00
>>894
> ・画面全体を文字列として取得したい。
端末エミュレータでcut&paste
> ・vimの出力するコントロールシーケンスを取得した。
script(1)
897:デフォルトの名無しさん
05/09/08 12:21:02
あれ? 自分の書いたプログラムで、
自分の書いた画面を知りたいと言うこと?
curses(3)を使って画面を書けばあ?
898:デフォルトの名無しさん
05/09/08 12:24:47
>>896
おお、ありがとうございます!scriptを使ってみます。
899:892=895=898
05/09/08 12:27:09
>>893
vramって何か分かりません…
>>897
自分の書いたプログラムから他のプログラムを呼びだして、その画面出力が得られないかと思ったのですが…。
900:デフォルトの名無しさん
05/09/08 12:30:59
>>899
scriptはそういう使い方じゃないなあ。
cursesの方が良さそう。>>687>>683
901:892
05/09/08 12:40:48
>>900
そうなんですか。。cursesで調べてみます。ありがとうございます!
902:デフォルトの名無しさん
05/09/08 13:13:26
>>901
騙されるなキミが調べるべきものは pty だ。
903:デフォルトの名無しさん
05/09/10 12:28:45
あるプロセスが動いているかどうかを調べるための関数を教えてください。
904:デフォルトの名無しさん
05/09/10 12:31:03
ps
905:デフォルトの名無しさん
05/09/10 12:57:56
>>903
URLリンク(www.adl.nii.ac.jp)
906:デフォルトの名無しさん
05/09/10 14:35:12
困りましたねぇ。
907:デフォルトの名無しさん
05/09/10 14:42:55
なんだこの直訳なページは!!
908:デフォルトの名無しさん
05/09/10 14:51:26
>>907
>>3
909:名無しさん@そうだ選挙に行こう
05/09/10 21:54:37
>>907
書籍じゃないんだから訳が気に入らないなら自分も訳せば?
910:名無しさん@そうだ選挙に行こう
05/09/10 22:45:09
メモリが'read'になることはできませんでした。
911:名無しさん
05/09/11 08:40:39
>>892
vim abc.txt |tee vim.log
でどう?
912:911
05/09/11 09:01:00
あるいは、vim のコマンドを使って適当な行を切り出す。
vim -c ":1,25w! onepage.txt" orig.txt
913:名無しさん@そうだ選挙に行こう
05/09/11 19:05:01
オクトデュアル ってなんでしょうか
914:名無しさん@そうだ選挙に行こう
05/09/11 19:10:03
ググったらすごかった
915:デフォルトの名無しさん
05/09/12 09:54:37
Emacsやviより統合開発環境を使った方がわかり易くないでしょうか?
916:デフォルトの名無しさん
05/09/12 09:58:27
Σ(´д`) えっ このすれは大学生、院生、趣味人 しかいないって本当ですか?
917:デフォルトの名無しさん
05/09/12 10:15:59
本当です
918:デフォルトの名無しさん
05/09/12 14:10:34
趣味人ってのが範囲広すぎるな。。。
(一応)社会人の俺もあてはまってしまうではないか。
919:デフォルトの名無しさん
05/09/12 14:18:35
社会人に(一応)と付ける意味がわからん。
NEETってこと?
920:デフォルトの名無しさん
05/09/12 15:04:12
>>913-
スレ違い
921:デフォルトの名無しさん
05/09/12 15:36:29
>>1-
板違い
922:名無しさん
05/09/16 19:59:21
Advanced Programming in the Unix Environment
だけど、
amazon.com から直接買うのと
amazon.co.jp から買うのとどっちが安い?
923:デフォルトの名無しさん
05/09/16 20:21:59
しらべりゃば?
924:名無しさん
05/09/16 20:52:18
調べた。
amazon.com(古本) + 送料9.79ドル + 日本の消費税 = 7848円 (3週間以上かかる?)
amazon.co.jp(新本) + 送料無料 + (税込み) = 8734円 (数日)
925:デフォルトの名無しさん
05/09/17 08:41:08
ついでに買いたい洋書の1冊や2冊ないのか?
926:名無しさん
05/09/17 13:26:08
古本混ぜると1パックにまとまらんのよ
927:デフォルトの名無しさん
05/09/17 13:46:49
自分なら値段が少し高くついても、面倒くさくないほうを選ぶ。
928:デフォルトの名無しさん
05/09/17 18:00:49
おまいら、MINIXやったか?
929:デフォルトの名無しさん
05/09/17 18:03:52
けっ、
930:名無しさん
05/09/17 20:19:39
Advanced Programming in the Unix Environment
第1版 著者Stevens(1999年に死去) 邦訳 『詳解UNIXプログラミング』
第2版 Pagoによる改定版(2005年) (いずれ第2版の邦訳も出るだろう)
Linuxについての記述を読んでみたいので買うか。
931:デフォルトの名無しさん
05/09/17 23:59:20
カーネルの勉強したいけど、どのへんがおすすめ?
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
932:デフォルトの名無しさん
05/09/18 08:01:52
FreeBSDじゃダメかね? OS問わないなら、一番読みやすいと思うが。
URLリンク(www.mckusick.com)
具体的なんじゃなくて、概論だったらこっちがお勧め。
URLリンク(www.amazon.com)
タンネンバウムはMINIX(とamoeba)で有名になったけれど、著作は激しくイマイチ。
933:デフォルトの名無しさん
05/09/18 12:16:16
今更FreeBSDのkernelなんか勉強して意味あるのか
LinuxかOpenSolarisだろ
934:デフォルトの名無しさん
05/09/18 12:50:49
Solarisだと、↓だな。
Solarisインターナル
URLリンク(www.amazon.co.jp)
935:デフォルトの名無しさん
05/09/18 12:52:00
>>933
基本的な技法はそれほど変わらないよ。
>>931のような人なら。
Linuxはいい本あるかね?
構造がころころ変わるしなあ。
936:デフォルトの名無しさん
05/09/18 15:34:39
kernel 2.4以前と2.6以降の違いって言えるか?
おれは、無理。
937:名無しさん
05/09/18 21:25:27
つ URLリンク(www-6.ibm.com)
938:デフォルトの名無しさん
05/09/18 21:28:20
↑ブラクラ
939:デフォルトの名無しさん
05/09/18 23:36:06
さすがにdeveloperWorksをブラクラって言っても誰も引っかからないと思う
940:デフォルトの名無しさん
05/09/19 11:43:21
おれはURLだけ張って澄まし顔の奴が許せない
941:デフォルトの名無しさん
05/09/19 13:04:58
なぐっていいよ
942:デフォルトの名無しさん
05/09/19 14:03:15
仕事上Linuxカーネルの仕様変更は0.0.0.1単位で把握してるけど
こういうのって御当地カップラーメンのバージョンいくつ覚えてるか
とかいうのと大差無いどうでもいい知識なんだよな。面白いけど。
943:デフォルトの名無しさん
05/09/19 15:19:54
ログファイルの再オープン(?)について質問です。
openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2);
のようにオープンして出力しているログファイルを、SIGHUP受信時に
再オープンしたいのですが、
signal(SIGHUP,sighup_handler);
...
void sighup_handler(int signal)
{
closelog();
openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2);
}
では、処理以降にログが記録されなくなってしまいました。
GoogleやKodersなどで調べてみてもこれというものが見つからなかったのですが
正しい処理の書き方はどのようにすればいいのでしょうか?
944:943
05/09/19 15:26:41
補足です。
最終的にログローテートを正常に行いたいわけですが、/etc/syslog.conf に
local2.*/var/log/test.log
とした上で、/etc/logrotate.d/syslog に
/var/log/test.log {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
と書いたのですが、ローテート後のログファイルには何も出力されませんでした。
それでプログラム側でもSIGHUPで何かしないとだめなのかと思ったのですが。。。
945:デフォルトの名無しさん
05/09/19 15:48:34
>>943
やり方はだいたいOKだから
closelogとopenlogを疑うしかないな
openlog内のファイルの開き方が特に心配だ
946:デフォルトの名無しさん
05/09/19 16:00:27
経験的にはcloselog呼ばずにもう1回openlog()呼べば上手く行くことが多い
947:943
05/09/19 16:02:03
ありがとうございます。
openlog()で開いてsyslog()で出力しているだけなので、openlog()の処理が
実際どのように行われているか分かりません…。渡している引数がおかしかったり
するのでしょうか?
それと環境を書いていませんでした。RedHat9(gcc3.2.2, glibc2.3.2)です。
単純なサーバプログラムの練習で書いています。
948:943
05/09/19 16:24:38
>>946
ありがとうございます。
試してみましたが、ファイル名を変更しても以前のログファイルにそのまま
追記されてしまいました。
根本的な質問で恐縮ですが、syslogにログを出力する場合にログローテートに
必要なこととは何なのでしょうか?
・アプリケーション側でHUPシグナル受信時などにログファイルを再オープン
・syslogdを再起動
↑上記は二つとも必要でしょうか?
949:943
05/09/19 16:26:42
すみません。>>943のopenlog()の部分ですが手写しだったので
間違っていました。訂正いたします。
誤: openlog("test", LOG_NDELAY|LOG_PID, 0, LOG_LOCAL2);
正: openlog("test", LOG_NDELAY|LOG_PID, LOG_LOCAL2);
950:デフォルトの名無しさん
05/09/19 16:51:07
書かれるログはsyslogが握ってるんだから出力するデーモン側では
何もする必要ないだろ。
syslogdが腐ってるんじゃないの?
それになんでわざわざkillのエラー出力を捨ててるのさ。
951:943
05/09/19 18:00:21
ありがとうございます。
syslogに出力している場合、syslogdを再起動(またはHUP)するだけで
良いということですね。ローテート後にログが出力されなくなるのは別の
原因かもしれませんので、もう少し調べてみます。
killのエラー出力を捨てているのは、/etc/logrotate.d/syslog の他の
デフォルト記述がそうなっていたので流用していました。
952:デフォルトの名無しさん
05/09/19 18:06:38
別にsyslogdの動作が標準で決まっているわけじゃないので、
SIGHUP送ればどうとかそんなことは環境依存。少なくとも最近の
OSに同梱のsyslogdなら、ローテートするためのコマンドが一緒に
ついてくるか、ローテートする方法がマニュアルに書いてある
はずだが。
どっちも無いとしたらそのロクでもない環境を恨め。
953:デフォルトの名無しさん
05/09/19 18:14:01
syslog(3)はsyslogdにログを送る関数で、
ログローテイトはsyslogd側の仕事。
殆んどの場合、SIGHUPでsyslogdがログファイルをreopenする。
ただし、新しいファイルはtouch(1)などで作成してやる必要があることが多い。
>>945>>946は、かなり無知だから、知らないことは黙っているように。
954:デフォルトの名無しさん
05/09/19 18:37:40
SIGPIPEってシグナルハンドラで捉えることができないのでしょう
か?
下のプログラムを実行してもシグナルハンドラが呼ばれず、一瞬で
終了してしまいます。linuxとsolarisでテストしてみました。
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void f(int a)
{
printf("sigpipe\n");
}
int main(int argc, char **argv)
{
int fds[2];
pipe(fds);
close(fds[0]);
write(fds[1], "hoge", 4);
signal(SIGPIPE, f);
sleep(100);
return 0;
}
955:デフォルトの名無しさん
05/09/19 18:44:24
>>953
syslogがsyslogdにログを送る関数なんて決まってないんだが
LinuxとBSDしか触ってないとこういう人間になるんだろうか
956:デフォルトの名無しさん
05/09/19 19:00:45
>>953
ちょっと誤解を招きそうな書き方じゃないか?
syslogdはHUPを受けてクチをパクパクするだけで
ログローテート自体はnewsyslog(ないし類似品)の仕事。
どのみちsyslogを吐くプログラムの知ったことではないんだが。
>>954
KILLとSTOP以外は捕捉できる筈だが。他のttyでkillを使ってSIGPIPEを
送ってみたか?
言っておくが、writeより後に設定したシグナルハンドラが時空を遡って
機能するなんてことはないぞ普通。
>>955
質問からsyslogdが存在するシステムなのは明らかなんだから別に構わないだろ。
この質問でimplementation-defined logging facilityがsyslogd以外であることを
想定する奴はいないだろ。
957:954
05/09/19 19:47:06
>>956
すいません。あほでした。writeを後にしたらシグナルハンドラが
呼ばれました。
958:デフォルトの名無しさん
05/09/19 19:53:54
>>954
$ cat tt.c
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void f(int a)
{
fprintf(stderr, "sigpipe\n");
fflush(stderr);
}
int main(int argc, char **argv)
{
signal(SIGPIPE, f);
for (;;) {
printf("This is a test\n");
fflush(stdout);
}
return 0;
}
$ ./a.out | echo
sigpipe
sigpipe
sigpipe
959:デフォルトの名無しさん
05/09/20 17:39:45
fork、ドキュメント呼んでも全然わかりません
小さいプログラムのソースと挙動から都合のいい解釈してます
でダメだししてほしいんですけども
intforked = -1;
int main() {
fork();
}
int fork() {
if (forked == -1)
forked = 0;
return (forked = main());
} else {
return (forked);
}
}
この自作forkはforkっぽいですか?全然話になりません?
960:デフォルトの名無しさん
05/09/20 17:44:22
>>959
なにがやりたいの?
961:デフォルトの名無しさん
05/09/20 18:11:49
>>959
pthreadあたりと混同してるね
962:デフォルトの名無しさん
05/09/20 18:16:53
自前で fork できたら大変w
963:デフォルトの名無しさん
05/09/20 18:22:44
>960
やりたい事はとりあえず理解したいです
あれであってます?forkがpidだけ違う複製(子)を生成します。て各所で書かれてますが
forkは己を呼ぶって事ですよね?どこを呼ぶんんでしょうか、もーまるごと疑問ですよ
根本が間違ってると思うんで質問しづらいんですけども
switch(fork()) {
case 0:
exec();
}
こんなコードとか見かけるんですけど
forkしてからexec()呼んだりするのは
何のメリットがあるんでしょうか
普通にexec()呼ぶコード見かけません
964:デフォルトの名無しさん
05/09/20 18:51:25
fork() は現在のプロセスと同じ内容の新しいプロセスを生成する。
exec() は現在のプロセスに別のプログラムをロードして実行する。
fork() してから exec() すれば、現在のプロセスはそのまま実行しつつ、
新しいプロセスで別のプログラムを実行することができる。
fork() しないで exec() すれば、現在のプログラムは別のプログラムに置き換わってしまう。
965:デフォルトの名無しさん
05/09/20 18:51:52
>>963
そのコードだと、fork()でプロセスがコピーされた後は
親プロセスも子プロセスもswitch()で真偽の評価を行う。
fork()の返り値は親と子で異なるから
そのswitchによって親と子の動作が分岐する。
「普通にexec()呼ぶ」と1つのプロセスが他のプログラムに化けるだけ。
それに対してfork()してexec()呼ぶとマルチプロセスになる。
966:965
05/09/20 18:57:13
>>965
>親プロセスも子プロセスもswitch()で真偽の評価を行う。
ミスった。
「親プロセスも子プロセスもswitch()で値の評価を行う」が正しい。
967:デフォルトの名無しさん
05/09/20 19:54:03
fork()した瞬間を堺に、実行してるプロセスが二つに分裂する。
fork()した途端にパラレルワールドができると思え。
そのパラレルワールドは元の世界とまったく同じだが、
ひとつだけ、fork() の戻り値と、親の pid だけが違う。
968:963
05/09/20 20:21:53
>965,967
すっごい、今その事を頭にいれて読み直しました。で
親はforkの戻り値がおおー、
子のプロセスが再度同じfork通って、おおーー
これ子もwait通っていいの?おおーすげーーーー
とか自己完結の連発です。上手く言えません
ぐっときましたありがとう。更に深めにのめり込んで見ます
これ2重人格だ
969:デフォルトの名無しさん
05/09/20 20:27:51
ちょっと微笑ましいね
970:デフォルトの名無しさん
05/09/20 20:34:43
>>968
> 子のプロセスが再度同じfork通って、おおーー
メモリの中身も全く同じ分身(子プロセス)が出来て、
そいつはfork()を返るところから始まるんですよ。
ただpidや帰り値が違うと。
971:デフォルトの名無しさん
05/09/21 04:54:25
でも実際、fork() のインターフェースは奇怪だよなぁ…。
なんかもっと上手い方法は無かったんかね。
972:デフォルトの名無しさん
05/09/21 04:58:57
いや、とてもよくできている。
*BSDのrfork()もpretty!
973:デフォルトの名無しさん
05/09/21 12:16:54
漏れもとても使い勝手が良いとおもう>>fork
Windows の CreateProcess みたいな一見すっきりしたAPIだと、
新プロセスに情報を渡すのが面倒。
974:デフォルトの名無しさん
05/09/21 13:43:43
>>973
すっきりしてるかなあ?
まあWin32のプロセスは親子の結び付きが弱いような気はしますな。
975:デフォルトの名無しさん
05/09/21 14:08:17
Win32は、
・コンセプト単純
・関数仕様複雑
・機能貧弱
POSIX fork()は、
・コンセプト抽象的
・関数仕様超単純
・(モデルが)高機能
fork()に戸惑う人は、抽象的なコンセプトにやられていると思われ
fork/joinモデルよりも、分身が出来るという概念に。
976:デフォルトの名無しさん
05/09/21 17:12:14
Linux環境で、getopt()を使ってるプログラムをgdbでデバッグ
してるんだけど、いくらgetopt()してもoptindをprintコマンド
で見るといつも1になってるんです。
コード中でprintf()してoptindを見ると、ちゃんと数字が上がる
んだけど。
で、optindのポインタを調べてみたら、gdbでprintしたやつと
コード中でprintf()したやつとは違った物になってた。
どうやったらgdbで正しいoptindを見ることが出来ますでしょうか。
977:デフォルトの名無しさん
05/09/21 20:04:01
試さずに適当に答えるが、最適化されちゃってんじゃないのかな。
最適化外してコンパイルしてみればあ。
978:デフォルトの名無しさん
05/09/21 20:17:42
libcコンパイルしなおせばいいんだと思うが、そもそも板違い。犬板逝け
979:デフォルトの名無しさん
05/09/21 20:19:04
(´・ω・`)
980:デフォルトの名無しさん
05/09/21 21:13:30
fork()の仕様が単純とか言ってる奴は池沼ですか
981:デフォルトの名無しさん
05/09/21 21:20:42
>>978
逆だろ? callerが、calleeによって変えられたメモリじゃなくて、
registerのみを見てるんだろ?
(gdb) printf *(&optind)
でどうかな?
982:976
05/09/22 10:15:47
皆様ありがとうございます。
CPUに弱いのでcallerとかcalleeとか全くわからいのですが、
>>981さんの言う
(gdb) print *(&optind)
でも結局同じでした。
皆さんの環境ではどうなんでしょうか。ちゃんと正しい optind
が gdb の print で見れているのでしょうか。
あと、犬板に相応のスレが無いのでここに来た次第です。
983:デフォルトの名無しさん
05/09/22 10:39:38
試してみたけどこのぐらいの簡単なプログラムで確かにその現象がでるな。
#include <stdio.h>
#include <unistd.h>
extern int optind;
int main(int argc, char **argv)
{
int opt;
while ((opt = getopt(argc, argv, "abc")) >= 0) {
printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
}
}
984:デフォルトの名無しさん
05/09/22 10:40:20
↑をgdbにかけるとこんな感じ。
(gdb) break 9
Breakpoint 1 at 0x8048414: file optind.c, line 9.
(gdb) run -a -b
Starting program: /home/matsui/a.out -a -b
Breakpoint 1, main (argc=3, argv=0xbfdd1884) at optind.c:9
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) s
10 printf("opt=%c optind=%d &optind=%08x\n", opt, optind, (int)&optind);
(gdb) s
opt=a optind=2 &optind=080496b8
9 while ((opt = getopt(argc, argv, "abc")) >= 0) {
(gdb) print optind
$1 = 1
(gdb) print &optind
$2 = (int *) 0xb7fb07d8
どうなってんのかね?
985:>>981
05/09/22 11:03:22
(gdb) print *((int *) 0xb7fb07d8)
すると、正しい値だね。
986:>>981
05/09/22 11:07:49
URLリンク(lists.gnu.org)
にも報告されてる。
6.0, 6.3でも駄目。
987:デフォルトの名無しさん
05/09/22 15:34:09
スレリンク(tech板)
>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。
>GNUが低品質なのはconfigureと無関係ではないだろう。
988:デフォルトの名無しさん
05/09/22 15:42:27
GNUって究極の低賃金労働者の粗悪品だろ。
989:デフォルトの名無しさん
05/09/22 15:47:22
そもそもソース配布なんて馬鹿げた思想を排除すべき。
990:デフォルトの名無しさん
05/09/22 15:48:14
まさにこの業界にとっての諸悪の根源だね
991:デフォルトの名無しさん
05/09/22 15:50:44
GDBっつーかGNU謹製のクソさ加減がよくわかった
992:デフォルトの名無しさん
05/09/22 15:52:09
でも、糞UNIXがいまだに生き残ってるのはGNUのおかげなんだよな。
993:デフォルトの名無しさん
05/09/22 15:53:36
SourceForge死ね
994:デフォルトの名無しさん
05/09/22 15:56:02
価値のあるソフトを作ってください
995:デフォルトの名無しさん
05/09/22 15:57:57
>>98
同意!
RMSは反社会的な共産主義者!
996:デフォルトの名無しさん
05/09/22 15:58:34
国にはGPLコードの輸入の禁止措置をとってもらいたい。
このままでは国内産業が壊滅してしまう。
997:デフォルトの名無しさん
05/09/22 16:00:13
おれもそう思う。
こういうソース公開の押し付けは、いらないんじゃないかって。
998:デフォルトの名無しさん
05/09/22 16:01:27
UNIX向けの商用のソフトが存在しないのは
こいつのせい
999:デフォルトの名無しさん
05/09/22 16:02:19
存在しないオプションを渡した時のoptoptは正しく読めるな。
それから、gdbで、optind = 100としても、メモリ側は書き変わってないけれど、
(gdb) print optind
すると、100が出力される。
やはり>>981ということで、メモリをフェッチせずにレジスタを見ているようだ。
1000:デフォルトの名無しさん
05/09/22 16:02:19
次スレ
スレリンク(tech板)
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。