>>1848 d-jiro > このような感じだと思うのですが、HTTPS相手だと > まったく受け付けてくれません・・・。 としたいなら、自前で相手サーバのポート 443 (https の ポート番号) に繋げて、自前でデータを暗号化してから ソケットに送り、受け取ったデータは復号化する必要が あります。これを全部やるのはとてもとても面倒なので、 モジュールを使いましょう。 まず、OpenSSL (http://www.openssl.org) をインストール してください。で、 http://www.cpan.org/modules/by-module/Net/ から Crypt-SSLeay モジュールを入れて下さい。これは LWP を 使うことを前提としたもののようです。 あるいは、Crypt-SSLeay モジュールの代わりに Net::SSLeay というモジュールもあり、socket like に使えますが、現在は 保守されていないのかもしれません。 # http://www.cpan.org/modules/by-module/Net/Crypt-SSLeay-0.23.readme # http://www.cpan.org/modules/by-module/Net/Net_SSLeay.pm-1.05.readme なお、どちらも使ったことがないので、上に書いたことは 全て想像です。成功したか失敗したか結果を教えて下さい。 >>1844 ふじ そうか、undef っちゅうのがありましたね…。 >>1846 rosegarden これとは逆に、use vars すると warning が出なくなって 困ったことがあります (そのときは warning を出してほしかった)。 |
whoisのプログラムをプログラムソースを探しているのですが、 どちらにあるかご存知ありませんか? できればperlがいいのですが。 よろしくお願いいたします。 |
>>1850 whoisおしえてください > whoisのプログラムをプログラムソースを探しているのですが、 perl 版 http://ring.asahi-net.or.jp/pub/lang/perl/CPAN/authors/id/D/DH/DHUDES/ ついでに C言語版 (FreeBSD の whois。最近のは IPv6 化されています) http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c whois プロトコル http://ring.asahi-net.or.jp/pub/doc/RFC/rfc1834.txt てなところでしょうか。 |
>>1849 68user >http://www.cpan.org/modules/by-module/Net/ >から Crypt-SSLeay モジュールを入れて下さい。これは LWP を >使うことを前提としたもののようです。 こちらの方法で試してみることにします。 おそらく数日後に結果が報告できると思います。 つまづきながらですが、また質問させていただくかもしれません。 ありがとうございました。 |
こんばんは、現在検索エンジンを作成中ですが、キーワード入力の所で いきなりつまずいています。 良く検索エンジン(goo,infoseek)等で検索文字を複数キーワード入力 し、キーワード間はスペースもしくは”|”パイプで区切る事をします。 単一キーワードは簡単に出来るのですが、このスペース区切りで 複数キーワードを引数にする方法がわかりませんが、宜しければお教え いただけないでしょうか? |
先日HTTPS接続のことで質問したものです。 HTTPS相手のPOSTでのCGI接続は、 Crypt-SSLeayモジュールを導入し、 LWPを使うことで解決しました。 部分的な引用でわかりにくいかもしれませんが、 $req = HTTP::Request->new( POST => "$url" ); $req->content_type('text/plain'); $req->content('$postdata'); とすることで、HTTPSだと意識することなく レスポンスをもらうことができました。 本当にありがとうございました。 |
>>1854 d-jiro > HTTPS相手のPOSTでのCGI接続は、Crypt-SSLeayモジュールを導入し、 > LWPを使うことで解決しました。 それはよかった。こちらの環境でも試してみましたが、 うまくいったようです。 >>1853 PHP > 一キーワードは簡単に出来るのですが、このスペース区切りで > 複数キーワードを引数にする方法がわかりません 複数キーワードに分割というのは $keyword = 'foo bar baz'; @keywords = split(/\s+/, $keyword); といったことですか? あるいは、複数のキーワードで検索するという ことですか? 後者ならば http://wakusei.cplaza.ne.jp/twn/wwwsrch.htm というのが参考になるかもしれません。 この CGI スクリプトは素直な書き方になっていますが、サーバへの 負荷はかなりのもので、実用には向きません。 最初のとっかかりとして、参考程度にとどめておくのがいいでしょう。 高速化のヒントは eval です。 |
http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse に ・環境はできるだけ詳しく ・マルチポスト禁止 ・回答をもらったら結果を報告する という注意点を追加しました。この場でいちいち注意したくはないので、 質問する前に是非ご一読下さい。 また、各メッセージの「No.1504 # 68user」などという表示の「#」を クリックすると、 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1500-1600#1504 というリンクに飛ぶようにしました。 # 更新履歴: # http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi やはり設計が甘かったようで、この掲示板に美しく機能拡張するのは もう無理みたいです。スクラッチから書き直したいけど、きれいに 書ける自信がない…。 |
初めて書き込みをします。 早速ですが質問があります。 現在osをredhat6.2Jでsendmail8-9-3を使いメールサーバーを構築中です。 そこでcgiを使いメールを発信させると受信したメールのヘッダーのRecievedの部分の Fromがnobody@localhostとなってしまいます。。 こちらとしてはホストのアドレスを載せたいのですが・・・。 cgiは、 #! /usr/bin/perl $toname = 'xxx@aaa.bbb'; $fromname = 'yyy@ccc.ddd'; open(MAIL, "| /usr/lib/sendmail -t -i -f yyy") || die; print MAIL "from:$fromname\n"; print MAIL "to:$toname\n"; print MAIL "Subject: TEST\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "TEST\n"; close(MAIL); print "Content-type: text/html\n\n"; print <<END_OF_DATA; <HTML> <BODY>SendMail $err</BODY></HTML> END_OF_DATA exit; fromで指定したほうがもちろんサーバー側で,toで指定した方がクライアント側です。 sendmail.cfの編集にはsendmail.defを使っています。 はたしてcgiが悪いのかsendmailの設定がまずいのでしょうか? sendmail.defの設定がまずいなら一体どこを変えればいいのか。 ご教授の程をお願いいたします。 |
>>1857 ケンMK2 > Fromがnobody@localhostとなってしまいます。。 これってやっぱりまずいのかなぁ? Received に名前解決不可能な サーバ名が書いてあるメールって結構ありますよね。でも、それは ファイアウォールの中からだから許されるのかな。さすがに localhost はまずいかもしれない。 sendmail をまともに管理したことがないため正しい解決策はわかり ませんが、手元にある sendmail.def (sendmail-v8.def をいじった もの) には、 OFFICIAL_NAME='foo.bar.com' とあります。その他は特に設定していません。それを元に生成した /etc/sendmail.cf には Djfoo.bar.com と書いてあります。 Dj(サーバの FQDN) ですね。 あと、ユーザ名が nobody になるのもどうなんでしょうねぇ。 他の行に envelope from yyy などと -f で指定したユーザ名が 書いてあると思うので、それはそれでよいような気もするんですが…。 ちなみに手元の環境でも envelope from nobody となりますが、 僕がいいかげんに管理している sendmail なので、正しいか どうかはかなり怪しいです。 |
ケンさん> わーい。回答が書けるー わたしは、このようにしています。 $from = "kaori.iida\@morning.musume"; $to = "natsumi.abe\@morning.musume"; open MAIL, "|/usr/local/bin/nkf -j |/usr/sbin/sendmail -t -f $from" or die $!; print MAIL <<EOM; To: $to From:$from Subject: こんにちはー 元気だべさ。 EOM close MAIL; これで、次のようなメールが届きます。 To: natsumi.abe@morning.musume From: kaori.iida@morning.musume Subject: こんにちはー 元気だべさ。 ポイントは、-f パラメタで渡すのはエラーのときの戻りメールの宛て先で、 From: フィールドをメールの中に再度書かないといけないようです。 なお、スクリプトは EUC で、メールは JIS でないと文字化けするので、 nkf -j をかましています。 |
>>1858 68user >> Fromがnobody@localhostとなってしまいます。。 > これってやっぱりまずいのかなぁ? Received に名前解決不可能な > サーバ名が書いてあるメールって結構ありますよね。でも、それは > ファイアウォールの中からだから許されるのかな。さすがに > localhost はまずいかもしれない。 jp.FreeBSD.org の sendmail 君が付けた received も localhost に なっていました。少なくともあそこは変な設定になってはいない だろうということで、問題ないんじゃないでしょうか。 |
質問では有りませんが、気になったもので・・・ 自分の借りているレンタルサーバーのログに以下のような行がありました。 xxx.xxx.xxx.xxx - - [28/Mar/2001:20:00:52+0900] "GET http://www.intel.com/ HTTP/1.1" 200 1846 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)" これってどう解釈すればいいのでしょう? 当然ですが該当するURLにファイルはありません。 試しに自己保有のLinux版Apacheに telnet でいろいろ試してみましたが、 ステータス 200 が出ることは有りませんでした。 単にサーバーのログ記録ミス(エラー?)なのでしょうか? こちらでも、こんなログが残る事は有りましたでしょうか? なんとなく気持ちが悪いので、判る方がいらっしゃれば教えてください。 |
>>1861 すな > 試しに自己保有のLinux版Apacheに telnet でいろいろ試してみましたが、 > ステータス 200 が出ることは有りませんでした。 FreeBSD 4.1-RELEASE + apache-1.3.12 で、 GET http://www.intel.com/ HTTP/1.0 でステータス 200 が出ました。ブラウザを普通に使っていれば、 PATH は必ず / から始まるはずですが、先頭が / でない PATH を 要求すると 200 が返るんですね。これって仕様かしら? |
>>1862 68user あら・・・ 環境が関係するようですねぇ。 Vine Linux 1.1CR Server version: Apache/1.3.3 (Unix) (Red Hat/Linux) な環境で、 $ telnet localhost 80 GET http://www.yahoo.co.jp/ HTTP/1.0 とすると、 HTTP/1.1 302 Found が返り… GET http://www.yahoo.co.jp/ HTTP/1.1 とすると、 400 Bad Request が返りました。 最初のログでは、HTTP/1.1 となっていたのに何故? アクセス元は、JPNICとINTERNICで調べられなかったので、新手の 攻撃かとも考えましたが違うようですね。 このログが出たApacheのバージョンは、Server: Apache/1.3.6 (Unix) でした… さらに上のサーバーで、 GET http://www.yahoo.co.jp HTTP/1.0 としたら、/ にした際のドキュメントが返って来ました。 もう一つおまけにWin版1.3.12のApacheでもステータス200で同じ動作でした。 #この動作は何??? う〜ん、すっきりしないなぁ… ともあれ試してもらってありがとうございました。 # サーバーの管理者に聞けば判るのかなぁ… |
>>1863 すな > GET http://www.yahoo.co.jp/ HTTP/1.1 > とすると、 400 Bad Request が返りました。 HTTP/1.1 では、Host ヘッダが必須ですが、これは大丈夫ですか? http://X68000.startshop.co.jp/~68user/net/http-4.html なお、HTTP/1.1 を使う場合は Host ヘッダを必ず付けなくてはいけません。 > / にした際のドキュメントが返って来ました。 うちもそうでした。 apache のバージョンに依存するようなので、本当のところを 調べたければ http://www.apache.org/websrc/viewcvs.cgi/ で 更新履歴を調べるのがよさげですが、時間がとれない…。 あるいは src/CHANGES に、変更理由が書いてあったりするかも しれません。 |
初めまして。 UNIXは、初めて触ってたのですが、本やHPで調べても答えがわからないので、質問させてください。 リモートで、クライアントのWin98にX for Windowsをインストールしましたが、文字化けを起こしました。FON形式に変換されています。 相手のソラリスにはOpen WindowとX Windowがインストールされてます。 クライアントがアクセスするとOpen Windowが立ち上がるよう、設定されていましたので、 /usr/openwin /bin/openwin を /usr/openwin /bin/Xに書き換えたんですが、状態は相変わらずです。 文がおかしいのでしょうか? よろしくお願いします。 |
はじめまして。突然ですが、ポート番号の対応表について質問させ てください。 こちらのサイトに「Windows なら C:\windows\services です。 ここに載っているプロトコルは「well-known port」と言えるでし ょう。」とあります。 しかし、C:\windows\servicesが見当たりません。なお私はwin NTを主に使用しています、バージョンによって異なるものなんで しょうか!? |
>>1864 68user >HTTP/1.1 では、Host ヘッダが必須ですが、これは大丈夫ですか? あたたた… 忘れていました。 で、host www.yahoo.co.jp:80 として再度やってみましたが同じ結果でした。 サーバー管理者へメールで問い合わせてみましたので解決したら報告します。 ・・・と書いている所へ管理者からメールが。 クライアントがURL欄に「http://www.intel.com/http://www.intel.com/」 と誤って記入すると、そのようなログが記録されます。 との返答。「えっ?」と思いながらやってみると、 GET http://www.yahoo.co.jp HTTP/1.1 host www.yahoo.co.jp:80 ログ内容 "GET http://www.yahoo.co.jp HTTP/1.1" 400 387 "-" "-" / からはじまらないパスを記録させる事は出来ましたが、やはり ステータス 400 でした・・・ う〜ん、眠れなくなりそうなんでこの件は諦めます(笑) >http://www.apache.org/websrc/viewcvs.cgi/ ↑これは知りませんでした。時間があるときにじっくり見てみます。 # いつもながら何かしら勉強させて頂いてますm(_ _)m >>1866 なべぞう WinNTの場合は、C:\WinNT\system32\drivers\etc\SERVICES です。このフォルダには、HOSTS や LMHOSTS も存在します。 スタートメニューの「検索」を最大限に活用すると便利ですよ。 |
/~68user/unix/pickup に早稲田大学からの連続アクセスがあり、OS の リソースを食い潰して open・fork などに失敗してサーバエラーが頻発 していました。load average が 20 近くまで上がってました。 とりあえず pickup は使用不可としましたので、あしからず。 同時に実行するプロセス数を制限する機能を追加したら使用可能に します。 >>1867 すな > host www.yahoo.co.jp:80 ではなく、host: www.yahoo.co.jp:80 です。`:' が足りません。 > クライアントがURL欄に「http://www.intel.com/http://www.intel.com/」 > と誤って記入すると、そのようなログが記録されます。 > との返答。「えっ?」と思いながらやってみると、 apache-1.3.12 では、ログに "GET /http://www.yahoo.co.jp HTTP/1.0" 404 と吐かれていました。その管理者の返答はほんとかなぁ? もし本当 ならば、apache にバグがあって、apache-1.3.12 では修正されて いるということですね。 > WinNTの場合は、C:\WinNT\system32\drivers\etc\SERVICES です。 なるほど。この文章をそのまま該当部分に追加してよいですか? >>1865 はてな > リモートで、クライアントのWin98にX for Windowsをインストール > しましたが、文字化けを起こしました。FON形式に変換されています。 文字化けの件はわかりませんが、これは X for Windows という商品名の Windows 用 X サーバですか? Windows 側で X サーバが起動しているなら、 Solaris 側で openwin や X を実行する必要はありません。なぜなら、 openwin や X は X サーバだからです。Solaris 側で実行すべきなのは kterm などの X クライアントです。 でなくて、なにかしらの仕組みがあって Solaris 側で X サーバを 実行すれば Windows 側で表示されるようなアプリケーションで あるなら失礼。そのようなアプリは さらに輪をかけてわかりません。 |
>>1868 68user >ではなく、host: www.yahoo.co.jp:80 です。`:' が足りません。 ステータス 400 はこれが原因でした。嘘書いてごめんなさい。m(_ _)m で、該当サーバーに GET http://www.yahoo.co.jp:80 HTTP/1.1 host: www.yahoo.co.jp:80 とした所、 "GET http://www.yahoo.co.jp:80 HTTP/1.1" 200 1934 "-" "-" のログが記録された事を確認しました。 この結果は、68userさんと同じくドキュメントルートが出力されました。 Apache1.3.3の方も同じ結果でした。 >>1862 68user >PATH は必ず / から始まるはずですが、先頭が / でない PATH を >要求すると 200 が返るんですね。これって仕様かしら? 動作からするとその様ですね。 >>1868 68user >その管理者の返答はほんとかなぁ? Apacheの出力結果を見ると管理者の言っている事は間違っているようです。 管理者といってもテクニカルサポートの「誰か」だし、適当にあしらわれ たのかも? >なるほど。この文章をそのまま該当部分に追加してよいですか? もし、サービスパックなどにより変更される場合は判りませんが、 少なくとも自分の環境では上記のフォルダに存在します。 WinNT 4.00.1381 SP5 ちなみに、このフォルダには以下のファイル群が含まれます。 HOSTS LMHOSTS NETWORKS PROTOCOL SERVICE drivers\etc というフォルダに格納するあたり、UNIXを意識しつつドライバーでは 無い内容を格納するのは、M$の苦しい所でしょうか…読みすぎ?;-p |
>>1869 すな > Apacheの出力結果を見ると管理者の言っている事は間違っているようです。 おそらくそのユーザは、外部利用可能なプロキシを探して そのサーバにアクセスしたんじゃないでしょうか。 例えばIEにプロキシとしてそのサーバのIPアドレスと ポート80をセットして、適当なサーバにアクセスしてみると リクエストラインはこういう感じ↓になるので、 GET http://www.yahoo.co.jp/ HTTP/1.0 そう言うログが残ることになると思います。 |
>>1869 すな はじめまして>hsjさん >おそらくそのユーザは、外部利用可能なプロキシを探して おぉ!なるほど。 IE5でプロキシ設定を施してアクセスした所、最初に疑問になったログ 結果と、ブラウザバージョン以外同じ結果となりました。 はぁ、なんかすっきりしました(笑) 片っ端からアクセスして調べているんでしょうか? ご苦労様なことです(^^; 自分はフレッツISDN接続なんですが、ここ3〜4ヶ月ルーターのログに 明らかにアタックと思われる攻撃が増えたので、過敏になっていました。 情報ありがとうございました。>hsjさん |
どうもレスが遅くなり申し訳御座いません。 >>1860 68user >jp.FreeBSD.org の sendmail 君が付けた received も localhost に >なっていました。少なくともあそこは変な設定になってはいない >だろうということで、問題ないんじゃないでしょうか。 へ〜そうなんですか・・・。 私もあれから試行錯誤しましたが、どうにもならず、結局気にしないこと にしました(笑)。 と言っても諦めるわけでなく、sendmail.cfを直接弄って何とかできるの では・・・と思いたちましたので、そちらの方法をしばらく模索していこ うと思います。 それではご迷惑をお掛けいたしました。 |
こんにちは、初めまして。 排他処理のことを読ませていただきまして、 フリーのCGIスクリプトに自分でシグナルに関する部分を追加しようと思いました。 ここでは $SIG{PIPE} = \&lock_off; というようにしておられますが、他のところでは、 $SIG{'PIPE'} = 'lock_off'; といった感じに書いていました。 これらは同じ意味なのでしょうか?(\&というのがよくわかりません) それから、こういったハンドラの定義は、ソース中のどの位置に書いても 同じなのでしょうか。最初の方に書いた方がいいのでしょうか? そして、ハンドラの中で変数の値を参照する場合、 その変数の初期化前にそのハンドラを書いて問題ないでしょうか? sub lock_off { if ($lockkey) { &unlock; } exit; } ・・・ $lockkey = 1; といった感じで。 Perlはまだよくわかっていないので、常識なことなのかもしれないですが、 よろしくご教授お願いします。 |
はじめまして。 CGIで環境変数を取得していると、「(compatible; MSIE 5.5; 〜〜」等で表示されるはずが、「好きな名前〜〜〜」でアクセスす人がまれにいるのです。これはどううことなのでしょうか? |
>CGIで環境変数を取得していると、「(compatible; MSIE 5.5; 〜〜」 >等で表示されるはずが、「好きな名前〜〜〜」でアクセスす人がまれにい >るのです。これはどううことなのでしょうか? クライアント(ブラウザ)がサーバに送るUser Agent 文字列を自由に設定できるソフトを使っているからではないでしょうか。 私の使っているフリーのタブブラウザ、「DonutR」でも、UserAgentを 自由に設定できます。 |
>>1873 dio > $SIG{PIPE} = \&lock_off; \& は関数へのリファレンスです。ちなみに $SIG{PIPE} = sub { unlink($lock_file); exit; } と等価です。 > $SIG{'PIPE'} = 'lock_off'; これだと、シグナルハンドラ lock_off の関数定義が同一ファイル 内にないといけません。別ファイルに sub lock_off を書いて、 それを require している場合は動かないということです。 関数へのリファレンスを使えば、どこで関数が定義されて いようと動きます。 これらの事柄はラクダ本に書いてありますので、もちお持ちで ないなら、購入されることをお薦めします。 > ハンドラの中で変数の値を参照する場合、その変数の初期化前に > そのハンドラを書いて問題ないでしょうか? これは、ハンドラ特有の問題ではなく、関数一般の話になります。 #!/usr/bin/perl &lock_off; sub lock_off { print $lockkey } $lockkey = 1; exit; と #!/usr/bin/perl $lockkey = 1; &lock_off; sub lock_off { print $lockkey } exit; では、前者はよろしくないことはわかりますね。 シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ シグナルハンドラが呼ばれるかわからないので、%SIG にセットする 前に必要な変数を全て設定しておきましょう。 |
>\& は関数へのリファレンスです。ちなみに >・・・・・・ >関数へのリファレンスを使えば、どこで関数が定義されて >いようと動きます。 なるほど そういう違いなのですか。 >シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ >シグナルハンドラが呼ばれるかわからないので、%SIG にセットする >前に必要な変数を全て設定しておきましょう。 わかりました。 どうもありがとうございます。 |
http://messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835092&tid=echoa4ka4da4a4a4f&sid=1835092&mid=4 > ↓には、「ping への応答」と書いてます。 > http://www.nspl.co.jp/Solaris/Security/inetd.html 誤りです。ping に応答するのは ICMP reply です。TCP/UDP の echo は、 http://ring.ocn.ad.jp/pub/doc/RFC/rfc862.txt を参照のこと。 A very useful debugging and measurement tool is an echo service. ってことですね。人様が直接使うものです。 …と yahoo BBS に書こうと思ったけどできなかったので、どなたか 伝えて下さい。 |
>>1868 68user > とりあえず pickup は使用不可としましたので、あしからず。 > 同時に実行するプロセス数を制限する機能を追加したら使用可能にします。 使用可能になりました。ちゃんと制限が効いてるかどうかは 試してませんが。 >>1878 68user > …と yahoo BBS に書こうと思ったけどできなかったので、 > どなたか伝えて下さい。 どもです>dio さん (ですよね?) |
>どもです>dio さん (ですよね?) あ、はい このページ参考にさせてもらったり、 お世話になったので。 |
ご存知であれば 教えてください psコマンド(ps -l)を実行したときの C 項目の数値の意味 なんですけどマイナス値のプロセスがあったのですが どのような状態を意味するのでしょうか? |
教えていただきたいことがあります。 UNIXについてはほとんど初心者なのですが、あるとき急に管理をしろ! と言われてしまいました。はじめはなんのトラブルもなかったのですが、 何日か前に急に他のマシンから自マシンへtelnet接続ができなくなって しまいました。 原因はなんなのでしょう? 機種は SUN ULTRA60 Solaris2.6が入ってます。もちろん自マシンにログイン後 自マシンの他のユーザへのtelnetでのログインもできないのです。 お願いします。 |
はじめまして、YOUKOと申します。 C-ISAMを使ってAPLを作成したいのですが 初めてで右も左もわかりません。 どこか初心者用のHPありませんか? OS:Solaris7です。 |
>>1881 akihiro > psコマンド(ps -l)を実行したときの C 項目の数値の意味 > なんですけどマイナス値のプロセスがあったのですが OS は何ですか? FreeBSD には C という項目はないように 思えます。Solaris2.6 では「スケジューリングのための プロセッサ利用率、ただし obsolete」と man に書いて あったような気がしますが、それ以上の事はわかりません。 >>1882 クワ > 何日か前に急に他のマシンから自マシンへtelnet接続が > できなくなってしまいました。もちろん自マシンにログイン後 > 自マシンの他のユーザへのtelnetでのログインもできないのです。 それは、問題のマシンで % telnet localhost でログインできないということですね? 全体的に情報が不足しています。「できない」とはどういう意味ですか? 何かエラーメッセージが出ますか? 何秒か待たされたりしますか? login: プロンプトは出ますか? 一般的には inetd が telnet ポートを見張り、接続があると inetd が telnetd を実行し、telnetd が認証を行います。もし % netstat -a | grep telnet tcp4 0 0 *.telnet *.* LISTEN という出力が出ないならば、telnet ポートを監視するサーバがいない ということなので、inetd の問題です。/etc/inetd.conf をチェック しましょう。 他にも tcpwrapper が接続を弾いている、などの可能性もありますが、 そこらへんは /var/log/ の下のログを見ましょう。telnet した後、 ls -lt /var/log すれば、最終更新時刻順にファイル一覧が表示 されますので、最も最近に更新されたログファイルの中を見れば 何かメッセージが書いてあるかもしれません。 >>1883 YOUKO > C-ISAMを使ってAPLを作成したいのですが C-ISAM という物を知らないのですが、Informix の DB 関係の ライブラリか何かでしょうか。そういうものは Informix の出して いるマニュアルを読むのが早道かと思います。 # 同様に、個人が提供している Oracle の情報も少ないですね。 |
>> psコマンド(ps -l)を実行したときの C 項目の数値の意味 >> なんですけどマイナス値のプロセスがあったのですが >OS は何ですか? ..(略)..、それ以上の事はわかりません。 HP-UNIXです。私なりに調査していますので解りましたら 載せさせていただきます。 |
排他処理のページを見て質問なのですが、シグナル処理でCGIを終了 させたくない場合はどうすればよいのでしょうか? シグナルを無視みたいなことはできないんでしょうかね?? よろしくお願いします。 |
>>1886 chie > シグナルを無視みたいなことはできないんでしょうかね?? perl なら $SIG{QUIT} = 'IGNORE'; などとすれば無視できます。ただし、SIGKILL と SIGSTOP だけは無視できません (ハンドラの設定も不可)。 |
>ただし、SIGKILL と SIGSTOP >だけは無視できません (ハンドラの設定も不可)。 横からすみませんが、無視できずハンドラの設定不可な シグナルは、どのような意味があるのでしょうか? (なぜ送られてくるのでしょうか?) |
>>1888 dio > 無視できずハンドラの設定不可なシグナルは、 > どのような意味があるのでしょうか? シグナルをブロックしたプログラムが誤って無限ループしてしまったら 止める術がなくなります。 なので、プロセス側から制御できない SIGKILL や SIGSTOP という シグナルを飛ばすことで、OS に強制的にプロセスを殺したり、動作を 止めたりするわけです。例をあげると、 #!/usr/bin/perl $SIG{TERM} = sub { print "TERM!\n" }; # kill コマンド対策 $SIG{INT} = sub { print "INT!\n" }; # Ctrl-C 対策 while (1){ printf("%d\n", $i++); sleep 1; } というプログラムを実行すると、Ctrl-C や kill プロセス番号 で 終了させることはできません。しかし Ctrl-Z で動作を止めたり、 kill -9 (=kill -KILL) でプロセスを殺すことはできます。 # 実際は他にもシグナルはありますので、kill -HUP などで # 殺すことが可能ですが、全てプログラム側でブロック可能です。 なお、SIGINT や SIGTERM を受けると、ファイルなどの後始末を 行ってから終了するプログラムは多いです。なので、いきなり SIGKILL で強制終了させるのはおすすめできません。まず SIGTERM や SIGINT を試して、それでも死ななければ SIGKILL を使うように して下さい。 |
えーと、私は何か勘違いをしていたかもしれません; >なので、プロセス側から制御できない SIGKILL や SIGSTOP という >シグナルを飛ばすことで、OS に強制的にプロセスを殺したり、動作を >止めたりするわけです。 これはわかります。SIGKILL、SIGSTOPの必要性はわかるのですが、 プロセスから制御できない物をなぜシグナルとして送る 必要があるのだろうかと思ったのです。 私はOSがプロセスにSIGKILL や SIGSTOPをとりあえず送って、 強制終了させる物と思っていたのですが、この考えが方が間違いでしょうか? |
>>1890 dio ん〜、SIGKILL, SIGSTOP の必要性はわかるが、ブロックできないんだから 「シグナル」として扱うのは変ではないか。SIGKILL, SIGSTOP と同等の 機能を持たせたシステムコールを新設した方がよいのではないか、という ことでしょうか? じゃなくて、OS が SIGKILL や SIGSTOP を送るのはわかるが、 コマンドラインで kill コマンドを使って SIGKILL, SIGSTOP を 送れるのは変ではないか、ということですか? |
前者のほうにちかいです プロセスを殺すのはOSなのですよね? プロセスにSIGKILLやSIGSTOPが送られても プロセスはそれに対して何も出来ないのなら、 なぜ送られてくるのかな?と。 プロセスはSIGKILLやSIGSTOPを認識出来ないのではないのですか? |
>>1892 dio > プロセスはSIGKILLやSIGSTOPを認識出来ないのではないのですか? できないです。 OS はプロセスごとにシグナルのテーブルを保持しています。例えば SIGTERM を無視する場合はテーブルの SIGTERM の項目を 1 に、 シグナルハンドラをセットする場合は、SIGTERM の項目にシグナル ハンドラ (関数) のアドレスをセットする、というふうに。 で、シグナルが飛んできたら、OS は対象のプロセスのテーブルを 参照し、無視すべきか、ハンドラを実行すべきかなどを決めます。 しかし SIGKILL/SIGSTOP は、 - テーブルの書き換えができない - シグナル発生時に OS がテーブルを参照することなくプロセスを操作する のどちらかの理由のため (どっちが本当かは知りません)、プロセス からブロックすることはできません。 だから、実際に OS が何かをプロセスに送っているわけではありません。 …で、回答になりましたか? ちなみにシグナルは FreeBSD なら ここらへんで処理してます。 http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sys/kern/kern_sig.c?rev=1.115 |
>で、シグナルが飛んできたら、OS は対象のプロセスのテーブルを >参照し、無視すべきか、ハンドラを実行すべきかなどを決めます。 なるほど、シグナルを受け取るのはOSなんですか。 >だから、実際に OS が何かをプロセスに送っているわけではありません。 そうでしたか。 私の考え方がWindows的でした。 (WindowsのMessageのような物と考えてました;) >…で、回答になりましたか? はい、どうもありがとうございました。 |
>>1884 68user >それは、問題のマシンで > % telnet localhost >でログインできないということですね? お返事が遅くなってしまいました。すみません。 上記のように入力すると、 SunOS5.6 ....(省略)普通といっしょ。 connection closed by foreign host. といわれます。 UNIXの相当詳しい人に見てもらったのですが、ぜんぜんおかしい 部分がないとのことでした。 来週OSをインストールしなおすとその方がおっしゃっておりました。 ご迷惑をおかけしました。 また分からないことがありましたらよろしくお願いします。 |
初めまして。 現在文字コードの変換について色々と模索中です。で、 このページの過去ログを見つけたのですが、情報を うまく理解することができなかったので質問させて ください。 まずバックグラウンドとして、Solaris2.6のWebサーバを 今まで他の人が管理してきたものの引継ぎで管理する事 になったのですが、そのWebサーバは文字の変換に /bin/iconvを利用しています。htmlファイルはeucJPで かかれていました。さらにソースの中でMETAタグに 「charset=x-euc-jp」という記述がありました。 またユーザからの情報をCGIからOracle(Solaris2.6上)に データを格納しています。この際CGIではeucからUTF-8に 変換を行なう記述がなされています。 # DBは個人的に触ることができない状態です。Solaris2.6 # の/bin/iconvを利用するところも変えられません。 通常インターネットを意識した時にはWindows環境(もち ろんこの中にも色々ありますが)だけを意識するのではなく、 色々な環境を意識してhtmlファイルを書くべきなのだと 思うのです(私見?)。 前置きが長くなりましたが質問です。 1.ソースの中でMETAタグに「charset=x-euc-jp」という 記述がある場合、ブラウザのエンコードで「自動認識」を 指定していれば、ソースは読める状態で表示され、かつ フォームに入力した文字列はeucJPでWebサーバに送信されて くるものだと信じているのですが正しいのでしょうか。 2.また正しい場合、表示を強引にSJISなどにしてフォーム に入力した場合にはeucJPで送られてくるのでしょうか。 それともSJISなのでしょうか。(まだ環境を自由にできない ので自分では確認できません。) 3.半角が入力されてきた場合にはどのように対処すれば いいのでしょうか。 4.JIS X 0208の13区、89〜92区、115区〜119区(換算)の 文字を入力するとエラーで返すようにしたいのですが、CGI でどのように記述すればいいのでしょうか。EUCコードで ADA1〜ADFE、F9A1〜F9FE、FAA1〜FAFE、FBA1〜FBFE、FCA1〜 FCFE(全て16進数) は不可、のように文字コードそのもので 制限をかけるのでしょうか。Perlでこういった内容を書き たいのですが、何か参考になるようなものがありましたら お知らせください。 長い文章になりましたが、ご助力お願いいたします。 |
>>1896 りんたろお。 > 色々な環境を意識してhtmlファイルを書くべきなのだと > 思うのです(私見?)。 このような考えの人が多ければ、UNIX 使いのような マイノリティはもっと幸せになれるのですが、なかなか そうもいかないようで…。 > 1 エンコーディング指定 x-euc-jp というのは、まだ EUC-JP というエンコーディング名が IANA に登録されていなかった頃の暫定エンコーディング名ですので、 現在は EUC-JP とするのが適当です。 ただし、Netscape Navigator 3.x などの古いブラウザでは EUC-JP を 認識できないという問題がありますが、「新しめのブラウザを使え」と 言えるような立場なら EUC-JP にする方がよろしいです。 なお、META でなく、CGI プログラムが出力するヘッダで Content-type: text/html; charset=EUC-JP とした方がよいです。META は、ヘッダにエンコーディングを 明示できない場合の代替手段ですので。 ただし、ブラウザは間抜けなので、エンコーディングを明示しても 自動認識に失敗することはあります。 > 2 フォームのエンコーディング 基本的に、フォームのあるページのエンコーディングで フォームのデータが送られてきます。少なくとも Netscape Navigator と Internet Explorer はEUC-JP なページの フォームで入力すると、入力内容を EUC-JP で送ります。 ただし、規格として決まっているわけではありませんので、 そうでないブラウザもあります (Lynx がそうかな)。 なので、入力データは jcode.pl などで EUC-JP や Shift_JIS に 変換するのがよいでしょう。1行追加するだけなので、たいした 手間ではないです。 > 3 半角入力 これは、半角カナということですか? なら 4 へ。 > 4 機種依存文字 http://X68000.startshop.co.jp/~68user/webcgi/char-code-2.html が参考になるかと思います。この掲示板では機種依存文字を自動変換 していますが、「機種依存文字があればエラー」とするのは簡単です。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi の、sub conv_wrong_char あたりをどうぞ。 |
ずっと以前から悩んでいたことなのですが、どこで聞いていいかわからず、 ここで書きます。よろしくお願いします。 会社の FreeBSD で Perl を使っていますが、nfs mount でいろんな マシンで同じスクリプトを使えるようになっていますが、 あるスクリプトが急に text file busy と言われます。 語感からするとエディット中に実行したとか、 複数の人が一つのスクリプトを実行しているとか いう感じですが、そうなっていても実行できるスクリプトは 実行できますし、どう考えてもヒマなファイルが同様の原因で 怒られます。 で、こうなってしまったら、件のスクリプトのディレクトリに行き % cp busyscript foo % rm busyscript % mv foo busyscript % chmod 755 busyscript これで百発百中修復します。 なぜなんでしょう。どなたかご教示をお願いします。 |
つい最近、perlを勉強しはじめた者です。本に掲載されているごく 簡単な例を実際サーバにUPして試しているのですが、 エラーメッセージが出てしまい、困り果てています。 よろしければ、アドバイスをお願い致します。 #!/usr/local/bin/perl5 print "what is your name?"; $name = <STDIN>; chomp($name) ; If ($name eq "kate") { print "Hello,kate! How good of you to be here!\n"; } else { print "Hello, $name\n"; } 以上です。 エラーメッセージは syntax error at test.cgi line 7, near "}" Execution of test.cgi aborted due to compilati on errors. です。 |
>>1899 kate (あれ、使い方がわからない…。(>_<)) kateさんのPerlの質問ですが、5行目の「If」を「if」にすると できますよ。あとついでなのですが、 "what is your name?\n"; とすると良いですね!(^^ゞ |
>>1897 68user ありがとうございます。これから試してみますので、結果が出たらまた ご報告いたします。→みなさま。 |
1900 りんたろお。さんありがとうございました。 ケアレスミスというか、本当にしょうもないミスだったの ですね・・(^-^; アドバイスありがとうございました!また、ヨロシクお願いします。 |
はじめまして。 Perlのネットワークプログラムについての質問なのですが、 あるサーバからあるサーバへデータをそのまま送るだけなのですが、 while (<$sock_recv>){ print $sock_send $_; } このときに受信側がユーザー操作によって受信をキャンセルされると、 >Can't use an undefined value as a symbol reference at ./test.pl line 46, <CLIENT> chunk 8322. と、エラーが出てプログラムが強制終了してしまいます。 強制終了せずに、受信側の受信キャンセルを検出する方法がありましたら 是非おしえてください。よろしくお願いします。 |
sendmaiを使用して2カ所にメールを送るにはどうすれば良いのでしょうか? open 〜 close を2度記述してもダメなのでしょうか。1度の記述だと正常に処理できるのですが2度の記述ですとうまくいきません。宜しくお願い致します、 open(MAIL, "| /usr/sbin/sendmail -t"); ・〜・ close(MAIL); |
>>1898 ふくし samba を使っていませんか? よく知りませんが samba はファイルを 読み込み禁止でロックしっぱなし (?) にするようで、そのとき ファイルを読もうとすると「Text file busy」となります。もし そうなら http://www.samba.gr.jp で検索すると解決策が見つかると 思います。 もし NFS しか使っていないなら、解決策はわかりません。 >>1903 しの print したデータを受け取る先のプロセスがいないと、print した 側には SIGPIPE が飛んできます。シグナルハンドラを設定して、 適切なエラー処理を行いましょう。 >>1904 くみ > open 〜 close を2度記述してもダメなのでしょうか。 それでもよいですし、2箇所に送ったことが相手先に知られても いいなら、 print MAIL "To: foo@hoge, bar@fuga\n"; でもいいです。 |
「ネットワークプログラミングの基礎知識」 http://X68000.startshop.co.jp/~68user/net/ を CVS に追加しました。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/ $Id:$ を挿入しまくったので、もしソースと解説の行番号がずれて いるかもしれません。見つけられた方はご指摘いただけると幸いです。 |
2カ所への送信はうまくいきました、有り難う御座いました。 ところが またまたしつもんです。sendmailで指定する件名が送信先によって文字化けしてしまいます。日本語文字コードによるものでしょうが、対策は具体的にどのようにしたらよいのでしょうか。 $sb='あいうえお'; print MAIL "Subject: $sb\n"; |
>>1907 くみ MIME encode する必要があります。 http://X68000.startshop.co.jp/~68user/webcgi/mail-2.html#2 をどうぞ。 |
はじめまして CGIを学んで1ヶ月の者です。 実は、仕事で少し面倒な依頼を受けて困っております。 内容はCSV形式のデータをPerlで読み取ってそれを HTMLのテーブルに流し込むスクリプトなのですが、 慣れていないので思考停止をして進みません。 具体的なCSVデータの例ですが、 10,果物,りんご,ringo.html,ぶどう,budou.html,ばなな,banana.html,10,野菜,かぼちゃ,kabotya.html,なす,nasu.html,きゅうり,kyuri.html,魚,まぐろ,maguro.html,さけ,sake.html,10,肉,牛,usi.html,麺,ラーメン,ra-men.html,そば,soba.html,うどん,udon.html まず、先頭に10があり、これは分類の区切りを示すヘッダーです。 次に果物でこれは、分類名です。 次にりんご、これは分類詳細名です。 つぎにringo.htmlでこれは分類詳細名のリンク先アドレスです。 このようなデータの並びですが、各分類と詳細項目は変動しますので このテーブルのあるWEBページを毎回読み直す必要があります。 どうのようにしたらよいのでしょうか。 お助けください。 |
>>1909 hooma どういう HTML を出力したいかが書いてないので、誰にも 正解は答えられないと思いますよ。CSV から読み込むだけなら、 「,」で split して、「10」が出てきたら新しいを配列を用意し、 次の「10」が出てくるまでその配列に push。そしたら1つの配列には 「ヘッダ,分類名,分類詳細名1,リンク先1,分類詳細名2,リンク先2...」 という値が入るでしょうから、後は適当に処理すればよいでしょう。 |
fgetsとsscanfの使いかたがまったくわかりません。 誰か教えて下さい。 下のような問題をといています。 誰でもいいのでできれば解いてもらえませんか?? 問題 1.ユーザーに1つの数の入力を求め、入力された数字を8進数表示、16進数表示するプログラムを作りなさい。 条件:main関数1つで作成する。 gets(),scanf()は利用しないこと。 扱う数字のさいだいは、int型で良い。 printf()は用いてもよい。 |
>>1911 HELP 宿題なのでしょうから、自分でやりましょう。 「ここまで自分でやりましたが、〜がわかりません」なら ともかく、「全くわかりません」では問題外です。 # 2ch に行けば、お姉さんやギコ猫が答えてくれますけどね。 |
確かに宿題みたいなものなんですが、ほんとに全然さっぱりなんです。 fgetsとsscanfがどういうものなのかだけでも教えてもらえませんか? 参考書など読んだのですが、どのように使えばいいのかわからないんです。 問題のプログラムは一応できたんですが、あっているのかもわからないし、 自分で作ったプログラムなのに理解できないんです^^; 誰かお願いしますm(_ _)m |
>>1913 HELP では、自分の書いたプログラムを見せて、「こことここがわからん」 「ここは、こういう意味だろうか?」と質問してみてはどうでしょうか。 課題のプログラムについて、知るべきポイントや勉強すべきポイントは たくさんあります。だから世の中にはたくさん C の参考書が出回って いる。それら全てを回答者に解説させようとせず、自分がどこまで 理解しているかを明らかにした上で、ポイントをしぼって質問する のが「うまい質問の仕方」というものです。 |
次の問題のプログラムを作ってみましたが、コンパイルできません。 どこが間違っているのか教えて下さい。 入力された数字を2進数表示するプログラムを作成しなさい。 条件:main関数、2進数の文字列を返す関数の2つの関数で作成する。 扱う数の最大は、int型でよい。 #include <stdio.h> int sinnkeisann(int k); main () { char buff[32+1]; int k ,kotae; printf("整数値を入力して下さい>>>"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&k); kotae = sinnkeisann( k ); printf("2進数表記>>>%d",kotae); } int sinnkeisann(int k) { int a,i,answer; char retu[32+1]; a=k; retu[32] = '\0'; for(i = 0; i < 32; i++){ if(i != 0 && a == 0){ break; } if(a %2 == 0){ retu[(32-1) - i] = '0'; } else{ retu[(32-1) - i] = '1'; } a = a / 2 ; } answer = retu[0]+(32-1)-i+1 ; return answer ; } |
>>1915 HELP FreeBSD 4.2-RELEASE ではコンパイルできましたよ。コンパイル できない場合は、どういうエラーメッセージが出たかを書きましょう。 ところで、条件では「文字列を返す関数」となっているので、 char *sinnkeisann(int k) とすべきですね。 ただし、インデントだけはきっちりつけましょう。そのソースを 見る他人のためでもあり、3日後にソースを見直すかもしれない 自分のためでもあります。 |
元質問 >>1861 すな >>1870 で hsjさんに教えてもらった件ですがやはりそのようですね。 http://homepage1.nifty.com/yito/namazu/gbook/20010423.0840.html といった記事を見つけました。よって、 >>1864 でのレンタルホスト管理者からのメールで >クライアントがURL欄に「http://www.intel.com/http://www.intel.com/」 > と誤って記入すると、そのようなログが記録されます。 はやはり間違いですね。 参考までに…(参考にもならないかな?) # しかし最近不正な(と思われる)アクセス増えたなぁ… |
>>1915HELP 文法的には間違ってないし、アルゴリズムも基本的には正しいです。(だけどね(^_^)ニヤリ’ あとはintの符号有り、符号無しの違いに注意したほうがいいです。 |
プログラムを以下の様に直してみました。しかしコンパイルができません。 #include <stdio.h> char *sinnkeisann(int k); main () { char buff[32+1]; int k ,kotae; printf("整数値を入力して下さい>>>"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&k); kotae = *sinnkeisann( k ); printf("2進数表記>>>%d",kotae); } char *sinnkeisann(int k) { int a,i,answer; char retu[32+1]; a=k; retu[32] = '\0'; for(i = 0; i < 32; i++){ if(i != 0 && a == 0){ break; } if(a %2 == 0){ retu[(32-1) - i] = '0'; } else{ retu[(32-1) - i] = '1'; } a = a / 2 ; } answer = &retu[0]+1 ; return answer ; } エラーメッセージ 2sinn.c: In function `sinnkeisann': 2sinn.c:46: warning: assignment makes integer from pointer without a cast 2sinn.c:48: warning: return makes pointer from integer without a cast |
>>1919HELP answerがint型なのにchar型を渡してるって事ですね。 答えの返し方は、関数を void function(int n,char* s) というように、返してほしい配列のポインタを引数にすればいいですよ。 |
>>1919 HELP コンパイルは成功していますよ。Warning がどれだけ起ころうが、 Error が出ない限り実行ファイルが生成されているはずです。 ところで、戻り値の返し方について >>1916 68user > char *sinnkeisann(int k) とすべき、と言いましたが、 >>1920 紅の猫 > void function(int n,char* s) の方がよいですね。 |
毎回適当にいじって、毎回忘れてしまう GD-1.33 & gd-1.8.4 & libpng-1.0.10 の インストールメモメモ。 libpng: % cp scripts/makefile.std Makefile % diff scripts/makefile.std Makefile < prefix=/usr/local --- > prefix=/home/68user/install/libpng % make && make install gd: % diff Makefile.org Makefile 15c15,16 < CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG --- > CFLAGS=-O -DHAVE_LIBPNG 48c49 < INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include --- > INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include -I/home/68user/install/libpng/include 58c59 < LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib --- > LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib -L/home/68user/install/libpng/lib 61c62 < INSTALL_LIB=/usr/local/lib --- > INSTALL_LIB=/home/68user/install/libgd/lib 64c65 < INSTALL_INCLUDE=/usr/local/include --- > INSTALL_INCLUDE=/home/68user/install/libgd/include 67c68 < INSTALL_BIN=/usr/local/bin --- > INSTALL_BIN=/home/68user/install/libgd/bin % make && make install GD: % diff Makefile.PL.org Makefile.PL 6,7c6,7 < my @INC = qw(-I/usr/local/include -I/usr/local/include/gd); < my @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/local/lib ); --- > my @INC = qw(-I/usr/local/include -I/usr/local/include/gd -I/home/68user/install/libgd/include -I/home/68user/install/libpng/include); > my @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/local/lib -L/home/68user/install/libgd/lib -L/home/68user/install/libpng/lib); % perl Makefile.PL LIB=~/p5-module/ INSTALLMAN1DIR=~/p5-module/man1/ INSTALLMAN3DIR=~/p5-module/man3/ % make && make install 動作チェック: % perl -e 'use lib "/home/68user/p5-module"; use GD' |
新たにプログラムを作り直してみました。 コンパイルできますが、実行結果が全て0になってしまいます。 どこを直せばいいのか教えて下さい。 #include<stdio.h> void swap(int *bin) { char buff[32+1],answer[32+1]; int count; buff[32] = '\0'; for(count = 0; count < 32; count++) { if(count != 0 && *bin == 0) { break; } if (*bin % 2 == 0 ) { buff[(32-1)-count] = '0'; } else { buff[(32-1)-count] = '1'; } *bin = *bin / 2 ; } buff[32+1] = *bin; } int main() { int hoge,hairetu[32+1]; char buf[32+1]; printf("数を入力してください>>>"); fgets(buf,sizeof(buf),stdin); sscanf(buf,"%d",&hoge); swap(&hoge); printf("2進数>>>%d\n",hoge); } |
こういう形のやりとりはあまり効率的とは思えませんが、 納得できるまで付き合いますか。 >>1923 HELP swap に hoge のアドレスを渡し、swap の中で *bin を2で 割っていって、0になったらループを抜けているので、 最終的には必ず *bin == 0、つまり hoge も 0 になります。 buff の中に結果を入れているのに、最終的にどこにも 反映していないので、呼び出し側では結果を受けとれません。 で、2進数の結果を int で返してもらっても、大抵の場合 うれしくないので、void int2bin(int n,char* s) という 形にしましょう。 呼び出し側では char answer[256], buf[256]; int input_num; printf("数を入力してください>>>"); fgets(buf, sizeof(buf), stdin); sscanf(buf, "%d", &input_num); int2bin(input_num, answer); printf("2進数>>>%s\n", answer); として、変換側では void int2bin(int num, char *answer) と受け、num の値を 2進数に変換して answer に格納、 とするのがよいでしょう。 |
この問題はなんとか解決できました。 最後までつきあっていただいて本当にありがとうございました。 またよろしくおねがいします。 |
しゅいましぇん Perl で質問です〜 らくだの本を読んでいて、 *dick = *richard; という代入を行なうと $richard も @richard も %richard も &richard も エイリアシングされてしまうけど、 *dick = \$richard; だと $richard だけがエイリアシングされてしまう、というのがどうもよくわかりません。 あと、 *PI = \3.14159265358979; と書くと $PI は「定数スカラー」になっていじれなくなる、というのも、 これ、左辺はリテラルのリファレンスなんでしょうか?? |
Awkを練習しています。 目的; Data1というファイルに4ポイントの座標が書き込んであります。 c1 10 10 c2 20 20 c3 30 30 c4 40 40 この4ポイントを4x4=16個ある箱の一番左下とし、これを元に、残り15箱にはいる15x4=60ポイントの座標を求める。offset値はx=y=100とします。 コマンドラインで awk '{for (i=0;(i,4);i=i+1) print $1"-"i+1, $2+"100"*i, $3}' data1 > out1 で一番したの4箱ぶんをだし、 out1; c1-1 10 10 c1-2 110 10 c1-3 210 10 c1-4 310 10 c2-1 20 20 c2-2 120 20 c3-3 220 20 .......... awk' '{temp=substr($1, 1,4);for (i=0;(i,4);i=i+1) print temp, i+"1", $2, $3+"100"*i}' out1 > out2 out2 c1-1 1 10 10 c1-1 2 110 10 c1-1 3 210 10 c1-1 4 310 10 c1-2 1 10 110 c1-2 2 110 110 c1-2 3 210 110 .................. で全てを出す方法で目的は達成したのですが,それを一度で出したいと思い、下の様にしてみました。 "test.awk" {for (i=0;(i<4);i++) print ($1"-"i+"1", $2+"100"*i, $3) >> "out1"} close ("out1") {getline < "out1" temp=substr($1, 1,4);for (j=0;(ij,4);j=j+1) print temp, ij+"1", $2, $3+"100"*j} #awk -f test.awk < data1 > out3 しかし、data1のFNR=4の場合out3は16行まででとまってしまうので、わざわざdata1のFNRを64にしてし、全ての値をだしました。 まだよく理解できていないので、どうしてなのかがわかりません。ご指導 お願い致します。 |
>>1926 ふくし > *dick = \$richard; > だと $richard だけがエイリアシングされてしまう、 > というのがどうもよくわかりません。 dick という名前には、スカラー、配列、ハッシュ、関数 などがあり、それぞれ $dick、@dick、%dick、&dick として アクセス可能です。名前と実データのアドレスの間は、 シンボルテーブルにより対応づけられています。で、 *dick = *richard; は、それらシンボルテーブルを一括して書き換えるもので、一方 *dick = \$richard; は $richard 用シンボルテーブルだけを書き換えるもの、 と解釈してはどうでしょうか。 実際にそういう作りになっているかどうかはわかりません。 ところで、 $fuga='fuga'; local(*hoge) = *fuga; print "\$hoge=$hoge\n"; は OK でも、 @fuga=('a', 'b', 'c'); local(*hoge) = *fuga; print "\@hoge=@hoge\n"; とすると In string, @hoge now must be written as \@hoge なんですねぇ。美しくないなぁ。 >>1927 ミング うーむ、awk 以前に、ちょっと問題の意味が理解できません。 # でも、for (j=0;(ij,4);j=j+1) という書き方もわかんないなぁ。 ファイルに書き込んで close し、それを読み出す、ということを されたいのでしょうが、もっとよいアルゴリズムがあるんじゃないか とは思います。他の方、わかりますか? |
>>1447 nac ! で fold しているのは sendmail くんだそうで。 http://script.lovely.to/bbs/infolng.cgi?print+200104/01040037.txt |
はじめまして。XRDといいます。 ただいま、C言語でCGIを作成しようと勉強中の身です。 そこでインプレスより販売しているCGIブックを購入したのですが、 コンパイルがうまくいきませんでした。 ソース内容は以下の通りです。 http://home.impress.co.jp/books/ietech/cgi.code/7.2.html 動作環境:TurboLinux6 tmp/ccuVjNj9.o: In function `main': /tmp/ccuVjNj9.o(.text+0x10b): undefined reference to `splitword' /tmp/ccuVjNj9.o(.text+0x122): undefined reference to `unescape_url' /tmp/ccuVjNj9.o(.text+0x14a): undefined reference to `splitword' /tmp/ccuVjNj9.o: In function `GetUserID': /tmp/ccuVjNj9.o(.text+0x76c): undefined reference to `dbm_open' /tmp/ccuVjNj9.o(.text+0x7bf): undefined reference to `dbm_fetch' /tmp/ccuVjNj9.o(.text+0x886): undefined reference to `dbm_store' /tmp/ccuVjNj9.o(.text+0x894): undefined reference to `dbm_close' /tmp/ccuVjNj9.o: In function `GetOrderRecord': /tmp/ccuVjNj9.o(.text+0x8c3): undefined reference to `dbm_open' /tmp/ccuVjNj9.o(.text+0x915): undefined reference to `dbm_fetch' /tmp/ccuVjNj9.o: In function `UpdateOrderRecord': /tmp/ccuVjNj9.o(.text+0x9ba): undefined reference to `dbm_store' /tmp/ccuVjNj9.o: In function `CloseDatabase': /tmp/ccuVjNj9.o(.text+0x9ce): undefined reference to `dbm_close' collect2: ld returned 1 exit status 自分なりの解釈としては、コンパイラのせいではなく、リンクの失敗ではないかと思っています。そこで、ndbm.hというファイルで宣言する際に必要なライブラリを指定すれば正常にコンパイルができるものだと思ったのですが、方法もしくはファイルがどこにあるかがわかりません。 manで調べたり、ndbm.hのファイルを開いて調べてみたのですが、それに関する情報がありませんでした。解釈がまちがっているのかもしれません。なにとぞ、ご指導おねがいします。 |
>>1930 XRD > 自分なりの解釈としては、コンパイラのせいではなく、リンクの > 失敗ではないかと思っています。 その通りです。 コンパイル済の dbm_open の実体 (=オブジェクト) が、標準 C ライブラリの libc.so.* に含まれていないのでリンク時にエラーに なっているわけです。なので、dbm 関係のライブラリ名を指定しないと いけません。探し方はこちら。 http://www.jp.FreeBSD.org/QandA/HTML/1609.html というわけで、手元の LASER5 Linux で % nm -o /lib/*.so.* /usr/lib/*.so.* | grep ' T ' | grep dbm_open 試すと、 /lib/libdb1.so.2:00009d70 T dbm_open /lib/libdb.so.2:00009d70 T dbm_open /usr/lib/libgdbm.so.2:00002230 T dbm_open /usr/lib/libgdbm.so.2.0.0:00002230 T dbm_open となりますので、cc -ldb -L/lib とか、cc -lgdbm -L/usr/lib すれば よいことがわかります。libdb の方は ndbm で、libgdbm の方は gdbm でしょうが、どちらがよいかはわかりません。 で、splitword と unescape_url の方は http://home.impress.co.jp/books/ietech/CGI.contents.html の ソースコードのリスト → cgiutils.h, cgiutils.c のところにあります。これをリンクするよう記述があったのでしょうが 見落としておられるのではないでしょうか。 |
>>1927 ミングさん >で全てを出す方法で目的は達成したのですが,それを一度で出したいと思い、下の様にしてみました。 実用的には、まずパイプで繋ぐことを検討すべきです。 1つのスクリプトにするにしても、元の2つがデータの行ごとの処理なので、 close や getline を使う必要がよく分かりません。 awkの勉強ということであれば、もっと単純な課題を使うべきでしょう。 スクリプトを拝見する限り、awkの文法を十分に理解されてるとは思えないもんで… |