68userさん、さっそくのお返事ありがとうございます。 <unp.h>ではなく、"unp.h"としてもこのような、ファイル、 ディレクトリはありませんと返ってきます。 僕はウィンドウズユーザーなので、UNIXをやるときは学校と つなげるしかありません。僕の環境はOSはWin2000,next ftp とtera term proで学校のSun OS5.8につないでいます。 作者(リチャードスティーブン)のHPからunp.hと例題が 詰まったフォルダーをダウンロードしてきて、WIN上で解凍。 それをFTPで自分の学校のアカウントにおくりました。 自分のアカウントではcというディレクトリを作り、その中に、 例題のdaytimetcpcli.cというファイルと,"unp.h"という ファイルをおいて、gcc daytimetcpcli.cとうつと、このファイル、 ディレクトリはありませんとでてきます。例題も、unp.hも コピー&ペーストでありつけたので、打ち間違えはないのですが、 どこに問題があるのでしょうか?たいへんすいません、よろしく お願いします。 ちなみにunp.hというファイルは下記のURLにいって、それをコピー してきました。 http://www.sfc.wide.ad.jp/~nob/webdoc/unpv12e/lib/unp.h |
>>2310 まさお > テキスト用、画像用とかいろいろとあるようですが、これらはみな1ツールとして > OSにインストールする必要があるということですよね。 「1ツール」の意味がよくわかりませんが、 - テキスト用としては a2ps - dvi なら dvi2ps - 画像用としては convert で PostScript に変換 などと、別々のアプリケーションで配布されています。 ファイル形式ごとに、いちいちどの変換フィルタかますかを考えるのが面倒、 ということなら、file コマンドなどでファイル形式を判断し、適切なフィルタを 経由して lp にデータを渡すシェルスクリプトを書く、という手もあります。 >>2311 ken > このような、ファイル、ディレクトリはありません 意訳せず、正確なエラーメッセージを書いて下さい。 例えば unp.h を置いて、以下の内容のような foo.c というファイル #include "unp.h" main(){ } を置き、コンパイルすると % gcc foo.c In file included from foo.c:1: unp.h:7: ../config.h: No such file or directory In file included from foo.c:1: unp.h:200: ../lib/addrinfo.h: No such file or directory となります。config.h や addrinfo.h を用意していないということはありませんか? でなくて、 foo.c:1: unp.h: No such file or directory と出るなら本当に unp.h がないのでしょう。unp.h が置いてあるディレクトリに行って、 % cat unp.h とするとちゃんと表示されますか? |
>68userさん いろいろとありがとうございました。よくわかってきました。 ところで、もっと漠然とした質問で申し訳ないんですけど、UNIX上で画像などを印刷する場合は、ファイルをPostScript形式に変換しなければどんなことしても絶対印刷は無理!ということなのでしょうか。 (要はImageMagickやxvのインストールは必須ということでしょうか。) Postscriptがなかった時代は印刷できなかったんですかね。 では失礼します。 |
>>2313 まさお 要は、プリンタが解釈できる言語を流してやる必要があります。 PostScript プリンタは PostScript を解釈できます。LIPS な プリンタには LIPS で、ESC/Page なプリンタには ESC/Page な データを流してやらないといけません。 そのための変換ツールが、lipsf だとか、gs (GhostScript) だとか、a2ps とか dvi2ps とかなわけです。 どうでもいいですが、PostScript プリンタってのは価格が高いので、 普通の企業では LIPS とか ESC/Page なプリンタを買うことが多いです。 Canon やら Epson がドライバを出しているので Windows からの利用は OK なんですが、UNIX から非 PostScript プリンタを使うのは何かと 面倒だったりします。 |
>68userさん ありがとうございました。 いろいろ複雑ですね。ますます考えることが多くなってきました。 要はUNIXからアプリケーションの画面(スナップショット)を印刷する処理を 考えているところなのです。 プリンタがEPSON LP8200LP2 でOSがSolaris2.6です。 画像なので、以前教えていただいたようにImage Magickなどの変換ツールを あとからインストールしないとダメなようすね。 OSの方にあらかじめ組み込まれているコマンドとかがないのか探しているんですけど、 みつかりません。「jtops」というコマンドがOSにあるのですが、これはテキスト専用 でしょうか。 あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードもテキスト 専用なんですよね? 画像の印刷はやはりPostscript変換ということですよね。 たびたび失礼しました。 |
>>2315 まさお > 「jtops」というコマンドがOSにあるのですが、これはテキスト専用 > でしょうか。 のようですね。 > あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードも > テキスト専用なんですよね? いいえ、イメージもいけます。 てゆーか、そんなに難しく考える必要はなくて、PostScript プリンタ なんだから PostScript で送ってやればいいんですよ。 例えば ftp://gatekeeper.dec.com/contrib/share/lib/ghostscript/examples/tiger.ps を落として % lp -d printername < foo.ps で印刷できるはず。 あとは任意の画像を PostScript に変換するツールをインストールすれば おしまいです。convert でも xv でも gimp でもできます。 |
>68user さん ありがとうございました。 勉強になりました。 |
ネットワークプログラムなのですが、エラーメッセージとしては、 68userさんがおっしゃったように、 In file included from daytimetcpcli.c:1: unp.h:7: ../config.h: No such file or directory In file included from daytimetcpcli.c:1: unp.h:200: ../lib/addrinfo.h: No such file or directory というメッセージが返ってきます。しかし、unp.hも、addrinfo.h, config.hも同じディレクトリーにいれてgcc daytimetcpcli.cと うっても、上記のようなエラーが返ってきます。ヘッダーファイル が同じディレクトリーにあるのにこのようなメッセージが返ってくる ということは、やはりどこかに、なんらかの間違いがあるということ でしょうか?よろしくお願いいたします。 |
>>2318 ken /home/user/c/daytimetcpcli.c /home/user/c/unp.h というファイル配置で、カレントディレクトリが /home/user/c/ のとき ../config.h は /home/user/unp.h を表します (.. は親ディレクトリを表すから)。同様に ../lib/addrinfo.h は /home/user/lib/addrinfo.h を表します。 そこにヘッダファイルがないので No such file or directory になって いるわけです。本に、ヘッダファイルやソースファイルをどういう ディレクトリ構成で置きなさい、という記述はありませんか? |
>>2318 ken unpv12e.tar.gz を持ってきて試してみたところ…README にやり方が ちゃんと書いてありますがな。ドキュメントはちゃんと読みましょう。 % ./configure % cd lib % make % cd ../intro % make daytimetcpcli でうまくいきました。 Solaris8 (SunOS5.8) ではどうかはわかりませんが、FreeBSD では lib の make 時に IPV6_DROP_MEMBERSHIP というマクロが未定義だ というエラーが出ました。これは古いマクロで、今は IPV6_JOIN_GROUP に 変わっています。 んで、ここを書き換えるとコンパイルが通りました。 |
.tgzとして拡張子があるファイル、どう展開しますか? |
ひとつ教えてください。 Windowのダンプのコマンドの一般的な使い方は、 xwd -out display.xwd と入力し、そのあとにダンプしたいWindowをマウスで選択しますが、 このとき、ダンプをとりたいWindowをマウスで指定するのではなく、 プログラム上で指定したいのです。(たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴなWindowを印刷する、とか。) そういった処理を行うこと可能なのでしょうか? |
はじめまして、 ネットワークプログラミング駆け出し者です。 このような、すばらしいHPを開かれている皆様に感謝致します。 とても、参考になります。 これからも、宜しくお願いします。 |
かなり勉強になりました。 telnetのところでGET index.html HTTP/1.0をやっても403エラーと 出てしまいます。どうしたら、うまくいくか教えてください。 お願いします。 |
cookの作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか? |
はじめまして。 最近unixを触りだしたひよっこです。 大変素晴らしいHPでとても助かります。 実は、unixのシステム管理業務の一環として時間別/日別のcpuの使用率及びメモリ使用率を調べるコマンドを探しています。 cpu使用率はsar -Aでデータを取る事が出来たのですが、メモリ使用率 が分かりません。 どうしてよいのか途方に暮れています。良きアドバイスを頂けないでしょうか? |
いつもお世話になっております。Perl で助けてください。 0x00 から 0xff までループ、というつもりで、 for ("\x00".."\xff") { ... } とやってますが、\x00 のとき1回だけやって終わるみたいです。 なじぇ?(?.?) どなたかお願いします。 |
>>2321 lee > .tgzとして拡張子があるファイル、どう展開しますか? 「tgz 展開」で検索しましょう。 >>2322 pon > たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴな > Windowを印刷する、とか。 というのができるのかどうかはわかりませんが、xwd の -id や -name オプションでウィンドウは指定できるでしょう。指定する 値は % xwininfo -root -all で表示されるものです。 >>2324 なっち > telnetのところでGET index.html HTTP/1.0をやっても403エラーと > 出てしまいます。 ブラウザでアクセスしても 403 となるなら、telnet でやっても 当然 403 です。もしブラウザでうまくいくのなら、Host ヘッダを 付けてやってみて下さい。 >>2326 ひよっこ OS は何ですか? 僕なら top を使いますが、sar -k とかでも できませんか? (試したことはありませんが) >>2327 ふくし > \x00 のとき1回だけやって終わるみたいです。 終わってしまいますね。よくわかりませんが、 for ("\\1" .. "\\9") { for ("!1" .. "!9") { などでも同様なので、\ という *文字* はマジックインクリメントの 対象外なんじゃないでしょうか。 で、実は本当にやりたいのは for (0x00 .. 0xff) { じゃあないですか? じゃなくて、もし \xXX という文字列が 欲しいのならば for (0x00 .. 0xff) { $hex = sprintf("%02x", $_); } あたりで。 |
いつもお世話になっております。 >実は本当にやりたいのは ばっちりです、、;;; |
はじめまして。 ここのプログラムは凄く参考になり助かっています。 サンプルプログラムの間違いなんですが、 http://jfx.startshop.co.jp/~68user/net/module-2.html にある、モジュールを使ったマルチスレッド版echoプログラムの 31行目「if ( fork() ){」は、 正しくは「if ( $pid = fork() ){」ですよね? |
お答えありがとうございました。 かなり役に立ってます。すごいです。 また、質問何ですが、UNIXで壁紙を自分のもっている画像にしたいので すが、xvコマンド以外で何か良い方法ありませんか? |
はじめまして。 このページではいつも色々と勉強させて貰っています。 さて、質問なのですが、今現在CVSにてあるプロジェクトを管理しており、 そのリポジトリをcvswebにて閲覧出来るようにしようとしているのですが、 ある特定のファイル達の中身を表示しようとしたときに、 cvs checkout: cannot exec co: No such file or directory cvs checkout: could not check out xxx/yyy/Zzz.java という様なメッセージが出てしまいます。 CVSも使い始めたばかりのため、何が原因なのかが分かりません。 もし良かったら何かヒントや、cvswebに関しての解説があるような ページがありましたら教えていただけると嬉しいです。 よろしくお願いします。 |
>>2330 しんベエ > 正しくは「if ( $pid = fork() ){」ですよね? ご指摘ありがとうございます。その通りですね。修正しておきます。 >>2331 なっち > お答えありがとうございました。 > かなり役に立ってます。すごいです。 じゃなくて、回答した結果、解決したかどうかをちゃんと書いて ください。とりあえず http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください。 > UNIXで壁紙を自分のもっている画像にしたいのですが、 > xvコマンド以外で何か良い方法ありませんか? ImageMagick が入っているなら % display -window root 画像ファイル でできるかも。 >>2332 わたなべ あなたも http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください。少なくともこの掲示板ではマルチポストは ダメですし、2ch でも歓迎はされないでしょう。 あと、OS は何ですか? cvs のバージョンは? RCS のバージョンは? cvsweb には zeller 版と knu 版がありますが、どっちを使って いますか? また、そのバージョンは? 内容を表示って、x-cvsweb-markup のことですか? それとも text/plain ですか? 仮にうちと同じ knu 版 cvsweb-1.105.1.65 だとすると、その エラーが出そうなところは exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); しかなさそうなので、オプションなどの値を表示させてみて、 同じことをコマンドラインからやってみてはどうですか。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/cvsweb.cgi?rev=1.9&content-type=text/x-cvsweb-markup |
渡辺です。 >>2322 pon は非常に浅はかな行動だったと認識しました。 申し訳ありませんでした。 今後気を付けます。 質問の続きをさせて頂いてもよろしいでしょうか…? 使っている各ソフトウェアのバージョンですが、 OS : Solaris SunOS 5.8 CVS : 1.9 RCS : 5.7 cvswebは、68userさんが使われているのを、http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgiのリポジトリから拝借しました。(ひょっとして、これもまずい行動でしたか。) そして、内容の表示というのは、x-cvsweb-markupも、text/plainもです。 表示出来るファイルに関しては、双方とも表示出来るのですが、エラーが起きるファイルに関しては、両方ともに起きます。 また、68userさんがおっしゃってる通り、 exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); でエラーが起きているであろうと考え、それをコマンドラインで実行してみたのですが、コマンドラインからは実行できました。 (実行できました。といいますか、あるファイルをチェックアウトでき、標準出力に出力されるという結果を得ました。) オプションの値を変更して…という事ですが、CVSに明るくないため、何をどうかえたら良いのかがわかりませんでした。 これで足りますでしょうか? もし、>>2332での事をお許し頂けるなら、何がアドバイス等を頂けたら嬉しいです。 結果報告もきちんとしますので、よろしくおねがいします。 |
>>2334 わたなべ での書き込みにある、>>2322は>>2332の間違いです。 重ねてお詫びします。申し訳ありません。 |
>>2334 わたなべ > ひょっとして、これもまずい行動でしたか。 問題ありません。書いてある通り、covered by the BSD-Licence です。 checkout できるファイルとできないファイルがあるということですから、 まずはリポジトリのパーミッションはどうなっているか確認して下さい。 同じディレクトリでも co できるファイルと co できないファイルがあれば、 ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが 全て co できないならディレクトリのパーミッションがおかしいでしょうし。 うちの Solaris2.6 では % chown -R cvs /cvsroot (グループは cvs グループで統一) % chmod -R g+w /cvsroot (cvs グループに書き込み権限を与える) % find /cvsroot -type d | xargs chmod g+s (BSD タイプのパーミッションに) とかしてます。でも、cvsweb.cgi は nobody で動かしているから これは関係ないかな…。 また、CGI の実行権限は何ですか? 例えば nobody なら su nobody して から checkout してみて下さい。 実際にどういうコマンドが実行されているかは、 if (! open($fh, "-|")) { # child open(STDERR, ">&STDOUT"); # Redirect stderr to stdout exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); } の前に print "Content-type: text/plain\n\n"; print qq(exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);); exit; などと書けばわかるでしょう。 それでもダメなら exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); を exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); として、どのファイルをオープンしようとしてエラーになっているかを 調べて下さい。ちなみに、こちらでやってみると open("/MASTER/cvs/CVSROOT/config", O_RDONLY) = 4 open("/MASTER/cvs/CVSROOT/cvsignore", O_RDONLY) Err#2 ENOENT open("//.cvsignore", O_RDONLY) Err#2 ENOENT open("/MASTER/cvs/CVSROOT/cvswrappers", O_RDONLY) = 4 open("/MASTER/cvs/CVSROOT/modules", O_RDONLY) = 4 .. open("/MASTER/cvs/admin/public_html/cvsweb.cgi,v", O_RDONLY) = 5 となります。 |
特定の一般ユーザをroot権限と同様な権限を与えたいのですが、 設定方法を教えてもらえないでしょうか。 /etc/groupのファイルのrootグループに追加するだけで はいけないのでしょうか。 |
度々すいません。 >>2336 68user >同じディレクトリでも co できるファイルと co できないファイルがあれば、 >ファイルのパーミッションが怪しいですし、あるディレクトリの下のファイルが >全て co できないならディレクトリのパーミッションがおかしいでしょうし。 リポジトリのパーミションを確認しました。 $CVSROOTディレクトリは 755 その中のプロジェクト毎のディレクトリは 775 でした。 各プロジェクト毎のディレクトリ内にある、サブディレクトリは 775 そして、ファイルは全て 444 でした。 チェックアウト出来るファイル/出来ないファイル、全て同一のパーミションで、同一のディレクトリ内にあるファイルでもチェックアウト出来るものと出来ないものがありました。 >また、CGI の実行権限は何ですか? >例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。 su nobody をやってみたのですが、パスワードを求められました。 僕はこのサーバの管理者ではないので nobody にはなれない様な気がしているのですが、可能なのでしょうか? >実際にどういうコマンドが実行されているかは、 これは最初に書き込みをした時点でやってみました。 CGI からではなく、ターミナル上のコマンドからならチェックアウト出来ることも確認しております。 >exec("/bin/truss", $CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where); やってみたところ、以下の様な出力を得ました = From ======================================== cvs checkout: cannot exec co: No such file or directory cvs checkout: could not check out xxx/yyy/Zzz.java waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED|WNOWAIT) = 0 ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL getpgid(17464) = 350 ioctl(0, TIOCGPGRP, 0xFFBEF17C) Err#22 EINVAL waitid(P_PID, 17464, 0xFFBEF1C0, WEXITED|WTRAPPED) = 0 waitid(P_ALL, 0, 0xFFBEF160, WEXITED|WTRAPPED|WNOHANG) = 0 fork() = 17467 waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED|WNOWAIT) = 0 ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL getpgid(17467) = 350 ioctl(0, TIOCGPGRP, 0xFFBEF22C) Err#22 EINVAL waitid(P_PID, 17467, 0xFFBEF270, WEXITED|WTRAPPED) = 0 waitid(P_ALL, 0, 0xFFBEF210, WEXITED|WTRAPPED|WNOHANG) = 0 llseek(0, 0, SEEK_CUR) Err#29 ESPIPE _exit(0) = End ========================================= 上のメッセージの3行目以降は、チェックアウト出来たファイル/出来なかったファイル共に出力されていました。 現状報告だけで申し訳ありません。 このページで学んだ通り、ユーザ権限で CGI を動かすようにもしてみたのですが、それでも何も状況は変わりませんでした。 |
>>2338 わたなべ の >例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。 は >例えば nobody なら su nobody してから checkout してみて下さい。 CGI は nobody で動いています。 と訂正させてください。 毎度毎度申し訳ありません。 |
>>2332 わたなべ > cvs checkout: cannot exec co: No such file or directory ん〜、これってもしかして、単に co(1) が見付からないって 言ってるのかな? co(1) にパスは通ってます? # って、どういうときに co(1) が使われるのかいまいちわかってませんが。 ## これが原因なら、かなり的外れなことを言ってたことになるなぁ。 |
>>2340 68user >ん〜、これってもしかして、単に co(1) が見付からないって >言ってるのかな? co(1) にパスは通ってます? co(1) という書き方が何を指すのか、わからないのですが、 which co で得られるパスを、 cvsweb.conf の $command_path にコロンでつなげて 記述すればいいんですよね? 一応それはやってあります。 CVS も RCS も、root が入れたものではなく、ユーザ権限でインストール したもので、それらをユーザの ~foo/cgi-bin/cvsweb/ で使おうと しているのですが、その辺りに問題があったりしますか? |
>>2338 わたなべ > which co で得られるパスを、 cvsweb.conf の $command_path にコロンで > つなげて記述すればいいんですよね? はい、そうです。 > リポジトリのパーミションを確認しました。 ではリポジトリのパーミッションは問題ないでしょう。 > 僕はこのサーバの管理者ではないので nobody にはなれない様な気が > しているのですが、可能なのでしょうか? 一度 root にならないと nobody にはなれません。 truss の結果 (システムコールでこけているわけではないらしい) と、 > cvs checkout: cannot exec co: No such file or directory > cvs checkout: could not check out xxx/yyy/Zzz.java のメッセージから、単に PATH を検索して、co が見付からないので co -r1.1 /cvsroot/xxx/yyy/Zzz.java,v がこけているのかと思ったのですが、違うのかなぁ。成功するファイルと 失敗するファイルがあるというのが謎ですが…。 でも、最近の cvs (少なくとも cvs-1.11) では rcs (co も含む) は 使っていないはずなので違うかなぁ (cvs は rcs を使わないけど、 cvsweb は rcs を使う)。 …と書いたところで今気づきましたけど、 > CVS : 1.9 古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11 にして下さい。ここが一番怪しいかな。 ちなみに、最新版の cvsweb はこちらです。 http://www.idaemons.org/cgi-bin/cvsweb.cgi/cvsweb/ |
>>2342 68user >…と書いたところで今気づきましたけど、 >> CVS : 1.9 >古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11 >にして下さい。ここが一番怪しいかな。 cvs-1.11をインストールしてみましたところ、無事にcvswebも問題なく 動き出す様になりました。 最初に無礼を働いてしまったにも関わらず、解決まで長々と 付き合って頂き、本当にありがとうございました。 これからもちょくちょく来て、勉強させて頂きます。 ありがとうございました。 あと、ちょっとメインの話とはずれるのですが、 >>2340 68user にあった >co(1) というのはどのような時に書く方法なのでしょうか? |
>>2343 わたなべ > 無事にcvswebも問題なく動き出す様になりました。 それはよかったです。バージョンは? と聞いておきながら 古いのを見落としていたのは失敗でした。 >> co(1) > というのはどのような時に書く方法なのでしょうか? セクション番号を表します。セクション 1 はコマンドなので、 「co(1)」は「コマンド co」という意味です。 # http://X68000.startshop.co.jp/~68user/unix/pickup?man |
ありがとうございます。 >>2344 68user >セクション番号を表します。 あ、すでに書かれているところがありましたか…。ちゃんと見てから 質問しないとダメですね…。本当にすいません。 今回色々勉強させて頂きました。 本当に感謝感謝です。 なんだか、頼りっぱなしだったのでちょっと一人で勉強してきます。 また何かあったら質問しにくるかもしれませんが、その時はよろしく おねがいします。 |
はじめまして。ゆきと申します。当方の環境はSUN Sparc Solaris2.51 です。 会社でC++の環境が必要になり、UnixもC、C++もさほど詳しくない私が、 インターネットを頼りにgcc2.95.3のインストールをしました。 それで、渡されたC++のソースをコンパイルしたのですが、以下のような エラーが出ます。渡した本人は、エラーが出るのはおかしいと言って います。 % gcc -lstdc++ -o hello hellocpp.cpp hellocpp.cpp:1: iostream: No such file or directory hellocpp.cpp:2: string: No such file or directory これは要するにインクルードファイルを見に行けない状態なんだと 思いますが、gccのインストールが上手くいっていないのでしょうか? ちなみにC++のソースは以下です。 --------------------------------------------------------- #include <iostream> #include <string> using namespace std; class CHello { private: string m_strOut; public: CHello(){ m_strOut = "Hello World!"; }; virtual ~CHello(){}; void print(void); }; void CHello::print(void) { cout << m_strOut << endl; } int main() { CHello chHello; chHello.print(); } --------------------------------------------------------- 何でも良いので、何かお気付きのことがありましたら、教えて下さい。 よろしくお願い致します。 |
>2346 ゆきさんはじめまして iostream じゃなくて iostream.h、 string じゃなくて string.h だと思います。 h は Header に通常つく拡張子です。 |
とかいって、<iostream> だけの書き方もあるんですね。 手元の cpp ソースは、<iostream.h> でコンパイルできていたのを <iostream> だけにしたら同様のエラーが出たので、 「.h を付けてみる」をトライする価値はあると思いますが。 |
>2348 ふくしさんへ お返事ありがとうございます。土曜は会社に行っていないため、教えて 頂いたことはまだ試していないのですが、日曜に休日出勤(サービス) でもして試してみようかと思います。ところで、申し訳ありませんが、 もしご存知であれば、もう少し教えて頂けないでしょうか。 今回、私にソースを渡した人は、Linux環境で試したらしいのですが、 コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうにしろと言っています。調べてみるとオプション-lは、 ライブラリファイルへのリンクだと知りました。こちらのマシーンを 覗いてみますと、-lstdc++は、どうやら/usr/local/bin/libstdc++を 見に行くように指定しているようなのですが、これがファイルではなく、フォルダなのです。そういうことで、よろしいんでしょうか? しかし、仮にlibstdc++フォルダを見に行くとしても、libstdc++直下 には、iostream(.h)もstring(.h)もありません。これらは、 usr/local/bin/libioというフォルダの中にありました。 ふくしさんは、iostream.hとすると上手くいったということですが、 libstdc++フォルダの中に、iostream.hもstring.hもあったと認識して よろしいのでしょうか?もしそうなら、それらが入っていない私の 環境は、やはりインストール時の失敗ということでしょうか・・・ もしよろしければ、お教え頂けませんか?よろしくお願い致します。 |
>>2348 ふくし > とかいって、<iostream> だけの書き方もあるんですね。 C++ はよく知りませんが、namespace 対応の C++ コンパイラならば .h を省略できるはずです。 gcc は長らく namespace への対応がダメダメでしたが、少なくとも gcc-2.95.3 では OK です。 で、iostream はヘッダファイルです。libstdc++ はライブラリです。 ヘッダファイルがないと言われているのにライブラリのことを気に するのは間違っています。 >>2349 ゆき > これらは、usr/local/bin/libioというフォルダの中にありました。 それはライブラリのソースでしょう。それが /usr/local/bin/ に あるのはおかしいです。 > コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうに > しろと言っています -lstdc++ は不要です。C で -lc が不要なのと同じで、わざわざ指定 しなくても勝手に libstdc++ はリンクされます (指定してもいいですが)。 > -lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように > 指定しているようなのですが どうしてそのように判断しましたか? 普通 -lhoge とすると /usr/lib/libhoge* というファイルがリンクされます。 手もとの環境を見てみると、ヘッダファイルとライブラリは以下の 場所に置いてありますので、参考にしてみて下さい。 Solaris8 + gcc-2.95.2 /opt/sfw/include/g++-3/iostream /opt/sfw/include/g++-3/iostream.h /opt/sfw/lib/libstdc++.a.2.10.0 /opt/sfw/lib/libstdc++.so.2.10.0 FreeBSD + gcc-2.95.2 /usr/include/g++/iostream /usr/include/g++/iostream.h /usr/lib/libstdc++.a /usr/lib/libstdc++.so Linux + gcc-2.95.2 /usr/include/g++-3/iostream /usr/include/g++-3/iostream.h /usr/lib/libstdc++-libc6.1-2.a.3 /usr/lib/libstdc++-libc6.1-2.so.3 結局のところ、うまくインストールできていないのではないかと思います。 |
はじめまして。yamaと申します。 Perlで困っています。 STDOUTの初期化の方法がわかりません。 print文にてhtmlを出力していますが、途中でエラーが発生 した場合、出力済みの情報を初期化し、エラーメセージを出力したい と考えています。 *STDOUT=""; としましたが、エラー表示以前の分も出力されます。 このようなことは不可能なのでしょうか。 プロバイダ環境はUNIXでApacheのサーバです。 なお、UNIX、Apache、Perlのバージョン 等詳しくは聞いていません。 |
>>2351 yama > このようなことは不可能なのでしょうか。 不可能です。stdout に出力したものは既に出力済かもしれませんし、 まだバッファに溜っているかもしれませんが、それをクリアする 方法はありません。出力済かどうかを判断する方法もありません。 # Java Servlet だとできるんですけどね。 というわけで、自前でバッファリングしましょう。 |
>>2352 68userさんへ お返事ありがとうございます。 「不可能」ですか。 ロジックを変更し、必要なチェックを先にするようにします。 今後ともよろしくご指導ください。 |
いつも、お世話になっています。ダウンロードについてなんですが、 .lzhのファイルをコンパイルすることは、UNIXではできるのでしょうか。 もしできるようであれば、ダウンロードの仕方を教えてください。 ちなみに、僕は「Solaris2.6」を使っています。お返事お願いします。 |
>2354 ゆうすけさん、はじめまして。 「lzh のファイルを UNIX でコンパイルする」 と言われると複数に解釈できて、 1)UNIX 上にある複数のファイルを固めて lzh の圧縮書庫を作る 2)どっかから持ってきた lzh の圧縮書庫を展開して、 その中の C とかのソースツリーをコンパイルする のどっちでしょう。 で、どっちもできます。ただし条件があって、お使いの Solaris に lha というプログラムがあるかどうかです。 コマンドラインで「lha」と打ち込んでみてください。 ある場合は使い方が表示され、ない場合は「ない」と起こられます。 で、ある場合はそれを使い、ない場合はインストールします。 で、使い方/インストールの仕方ですが、 とりあえず「lha」というコマンドの名前までわかったので、 あとは検索するなりしてがんばってみて、 どうしてもダメだったらまた聞いてください。 そのとき上の1)なのか2)なのかそれ以外なのかも教えてください。 >2350 68userさん、フォローありがとうございます。 ていうかいつもご苦労様です。 ちょっとでも負担を軽減しようとがんばってみたんですが 役に立たず、申し訳ありません ;;; |
>>2350 68userさんへ お返事ありがとうございました。下記2349の中で、私は勘違いな発言を していたようです。 >-lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように >指定しているようなのですが とありますが、違いますよね。libstdc++の中の、libstdc++.aという ライブラリファイルを見に行ってるということですね。ということは、 ---------------------------------------------------- hellocpp.cpp:1: iostream: No such file or directory hellocpp.cpp:2: string: No such file or directory ---------------------------------------------------- と言うエラーで見に行っているインクルードファイルは、自動的にリンク されなければならないということでしょうか。私の行ったインストールは どうもおかしいような気がしてきました。 ちなみに、こちらの環境は以下のようになっていました。 /usr/local/bin/libstdc++/iostream /usr/local/bin/libio/iostream.h /usr/local/bin/libstdc++/libstdc++.a libstdc++.so*は検索しても無いような状況でした。やはり再インストール をしてみようと思いますが、上記フォルダ階層はそもそも間違いで、 正しいインストール先というのは、インストール時に指定できるように なっているものなのでしょうか?何度も申し訳ありませんが、よければ その辺りのことを詳しくお教え願えませんでしょうか? よろしくお願い致します。 |
>>2356 ゆき > libstdc++の中の、libstdc++.aというライブラリファイルを見に行ってる > ということですね。 インクルードとリンクは全く別物です。インクルードファイルと ライブラリには何の関係もありません。 > 自動的にリンクされなければならないということでしょうか。 インクルードファイルはリンクするものではなく、インクルードする ものです。 -v を付けてコンパイルすると以下のようになります。 % g++ -v a.cpp Using builtin specs. gcc version 2.95.2 19991024 (release) /usr/libexec/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ a.cpp /tmp/ccFhD943.ii GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF) #include "..." search starts here: #include <...> search starts here: ← ここ★ /usr/include/g++ ← ここ★ /usr/include ← ここ★ /usr/include ← ここ★ End of search list. The following default directories have been omitted from the search path: End of omitted list. /usr/libexec/cc1plus /tmp/ccFhD943.ii -quiet -dumpbase a.cc -version -o /tmp/cctFu943.s GNU C++ version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release). /usr/libexec/elf/as -v -o /tmp/ccvXl943.o /tmp/cctFu943.s GNU assembler version 2.10.0 (i386-unknown-freebsd4) using BFD version 2.10.0 /usr/libexec/elf/ld -m elf_i386 -dynamic-linker /usr/libexec/ld-elf.so.1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/libexec/elf -L/usr/libexec -L/usr/lib /tmp/ccvXl943.o -lstdc++ -lm /usr/lib/libgcc.a -lc /usr/lib/libgcc.a /usr/lib/crtend.o /usr/lib/crtn.o ★を付けた部分でインクルードファイルの取り込みが行われます。 この環境では、標準のインクルードファイルは /usr/include/g++、 /usr/include である、ということがわかります。そこにインクルード ファイルが置いてあれば何もエラーは起こらないはずです。 で、★の部分が終わったら初めてライブラリが出てくるわけで (ld がライブラリをリンクする)、★がうまくいかないのに ライブラリが云々と悩むのはおかしいです。 > /usr/local/bin/libstdc++/iostream > /usr/local/bin/libio/iostream.h > /usr/local/bin/libstdc++/libstdc++.a これはソースで、本来不要なファイルではないですか? /usr/local/bin/ に ファイルを展開して、そこで make したんじゃないかと想像しますが。 > 上記フォルダ階層はそもそも間違いで、 おそらく間違いでしょう。 > 正しいインストール先というのは、インストール時に指定できる > ようになっているものなのでしょうか? ソースからコンパイルしたなら、make 時に指定することもできますが、 普通はデフォルトのディレクトリにインストールします。 とりあえず package を利用してはどうですか? ftp://SunSITE.sut.ac.jp/pub/sun-info/Solaris/sparc/2.5/gcc-2.95.3-sol25-sparc-local.gz |
>>2337 aki おっと、見逃していました。 > /etc/groupのファイルのrootグループに追加するだけで > はいけないのでしょうか。 root グループにはなれますが、root にはなれません。 sudo など、setuid などで検索してみてください。 |
はじめましてkanjiと申します。コマンドのページを良く利用させて頂いています。感謝です。 UNIXの掲示板で、Linuxの質問をよろしいでしょうか。 本題の質問なのですが、初めてRedHat Linux7Jをインストールし、Webサーバの構築を考えています。 ですがPCMCIAのNWカードを認識してくれません。(3com 3c589Dを使用) そこでPCMCIAのドライバをインストールしようとpcmciacs.3.1.30.tar.gz を入手し、 #zcat pcmciacs.3.1.30.tar.gz | tar xvf - #cd pcmciacs.3.1.30.tar.gz #make config を行なうと、configエラーが出ます。ソースツリーが無いと言われます。 ソースツリーとはどのようなもので、どうやってインストールすれば良いのでしょうか。 よろしくお願い致します。 |
>>2359 kanji pcmciacs.3.1.30.tar.gz を展開した pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 % cd pcmciacs.3.1.30.tar.gz ではなくて、 % cd pcmciacs.3.1.30 では? 〜.tar.gz は圧縮ファイルです。 cd は Change Directory です。 |
>>2360 ふくし > pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 Linux も pcmcia も全然知りませんけど、 http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO-2.html などを見るに、カーネルソースを展開して、そこに pcmciacs*.tar.gz を 展開して、make config && make all && make install してモジュールを インストールすべきなのに、カーネルソースツリーが存在していないので エラーになってるんじゃないでしょうか。 >>2359 kanji > configエラーが出ます。 具体的にどういうエラーが出るかをちゃんと書けば、何が問題か わかる人にはわかるでしょう。 # 僕は残念ながら わからない人です。 |
>>2360 ふくし >>2361 68user すみません、わかりました。 ありがとうございました。 カーネルソースの展開が抜けているのでしょう。 早速やってみます。 |
初めまして、inabaと申します。 >>2359 kanji 3com だったら、ディフォルトで認識してくれると思いますが…。 ただ、network と pcmcia の起動順が逆なので失敗しているのかも。 # cd /etc/init.d # ./pcmcia restart # ./network restart と入力してみてください。 # ifconfig で、eth0 が認識されていませんか? 見当違いだったらすみません。 |
はじめまして、渡邊と申します。 ネットワークプログラムに興味があり、POP3 クライアントを作ってみよう(2)の POP3 クライアントサンプルを動作させてみました。 お聞きしたいのは、このままでちゃんとメールが表示されるプロバイダーと表示されないプロバイダーがあり、ニフティでは途中で固まってしまいます。認証までは動いているようで、LISTので止まっているようです。 どうすれば、いいか教えていただけませんか? |
>>2364 わたなべ > LISTので止まっているようです。 http://x68000.startshop.co.jp/~68user/net/sample/pop3-client.pl ですね? telnet で pop3 サーバと話してみるとどうなりますか? LIST 送信の後の while (<SOCKET>){ m/^\.\r\n$/ && last; を while (<SOCKET>){ print "[$_]"; m/^\.\r\n$/ && last; として実行すると何が表示されますか? Windows マシンで動かしていますか? (環境はちゃんと書きましょう) もしそうなら socket(SOCKET,PF_INET,SOCK_STREAM,0)|| die ... の後に binmode(SOCKET); という行を追加するとどうなりますか? |
はじめまして。いつも勉強させてもらっています。 >>2364 わたなべ > LISTので止まっているようです。 私も、pop3 クライアントを自作したときに、同じことを経験しました。 そのときは、pop3 サーバが NT で、 > +OK IMS POP3 Server 0.87 Ready というものだったのですが、 LIST の返事に、"." のみの行がなかったのです。 > +OK 0 message (0 octets) > 0 messages (0 octets) こんな感じでした。 |
>>2366 kuw >LIST の返事に、"." のみの行がなかったのです。 補足です。 その時は、LIST のかわりに STAT を使うようにして回避しました。 |
>>2365わたなべ 早速ありがとうございます。 試してみましたが、状況は変わりません。 環境は、Windows2000のクライアントで、サーバーはFreeBSDです。 telnet pop.nifty.com 110 USER ****** PASS ****** LIST とやる分には、NIFTYでもちゃんとリストされます。 print "[$_]";を追加してみると [+OK <**********> ][+OK ][+OK と表示されます。 print $_; にしてみると、 +OK <**********> +OK +OK で止まってしまいます。 いづれも、Ctrl+Cで終了しないと終わりません。 ところがiij4uでは、 +OK IIJ ************ +OK ************ +OK ************ +OK 5 messages**** と言う感じで正常に動いています。 尚、binmode(SOCKET);を追加してみても状況に変化はありません。 iij4uとNIFTYの差は、+OKの後にiij4uの方は文字があるのですが、NIFTYは何も無いことぐらいです。 att.ne.jpでも動きませんでした。 もちろんtelnetで直接タイプすればリストも問題ありません。 よろしくお願いします。 |
>>2364わたなべ kuwさんありがとうございます。 STATを使う件、本日世が明けたら試してみます。 ありがとうございます。 |
>>2366 kuw > LIST の返事に、"." のみの行がなかったのです。 >> +OK 0 message (0 octets) >> 0 messages (0 octets) なるほど。もう少し詳しくお聞かせ下さい。 それは mail box にメールがたまっていなかったときのみ . が ないのでしょうか? あるいはメールがたまっていても . がない のでしょうか? また、その POP3 サーバアプリケーションの名前は 何かわかりますか? ちなみに . をもってレスポンスの終了と見なしている根拠は http://ring.ip-kyoto.ad.jp/pub/doc/RFC/rfc1939.txt > When all lines of the response have been sent, a > final line is sent, consisting of a termination octet (decimal code > 046, ".") and a CRLF pair. > Examples: > C: LIST > S: +OK 2 messages (320 octets) > S: 1 120 > S: 2 200 > S: . です。 |
>>2370 68user >それは mail box にメールがたまっていなかったときのみ . が >ないのでしょうか? あるいはメールがたまっていても . がない >のでしょうか? メールがたまっていなかったときのみです。 メールがたまっているときは、 > +OK 1 messages (1146 octets) > 1 1146 > . となります。 >また、その POP3 サーバアプリケーションの名前は >何かわかりますか? EMWAC の IMS POP3 Server 0.87 です。 5, 6 年前に NT にインストールして以来、そのまま使っているので、 かなり古いものだと思います。 # この数年、NT を全くいじっていないので、最近の事情はわかりませんが・・・ >ちなみに . をもってレスポンスの終了と見なしている もちろん、これは正しい仕様だと思いますし、 同じ仕様の MUA やメールチェッカーも多いと思います。 |
>>2364わたなべ おはようございます。 昨日の続きですが、下記のようシンプルにしてテストしてみましたが、状況に変化はありませんでした。 よろしく御願いします。 --------------------------------------------- print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; print SOCKET "LIST\r\n"; while (<SOCKET>){ m/^\.\r\n$/ && last; print $_; } print SOCKET "QUIT\r\n"; --------------------------------------------- 上記の結果 ■AT&Tに接続した場合 +OK <283**.10082***86@mail.att.ne.jp> +OK +OK (ここで止まってしまうので Ctrl+C) ^C % ■iij4uに接続した場合 +OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp> +OK Password required: ******@**.iij4u.or.jp +OK ******@**.iij4u.or.jp has 2 messages (2182 octets) +OK 2 messages (2182 octets) % ------------------------------------------------------------------------------- ■telnetでAT&Tに接続した場合 telnet ***.att.ne.jp 110 +OK <283**.10082***86@mail.att.ne.jp> USER ******** +OK PASS ******** +OK LIST +OK 1 958 2 960 . QUIT +OK ■telnetでiij4uに接続した場合 telnet **.iij4u.or.jp 110 +OK IIJ POP3 Server (**.iij4u.or.jp) starting. <128**.1008***94@**.iij4u.or.jp> USER ******** +OK Password required: ******@**.iij4u.or.jp PASS ******** +OK ******@**.iij4u.or.jp has 2 messages (2182 octets) LIST +OK 2 messages (2182 octets) 1 1090 2 1092 . QUIT +OK IIJ POP3 Server (w/mdir) (m-**.iij4u.or.jp) signing off |
>>2371 kuw ありがとうございます。ということは、その POP3 サーバのバグと 判断してもよいようですね。 >>2372 わたなべ では、残るは改行コードくらいですかね。 select(SOCKET); $|=1; select(STDOUT); $|=1; # 標準出力のバッファリングも OFF print SOCKET "USER $username\r\n"; print SOCKET "PASS $passwd\r\n"; print SOCKET "LIST\r\n"; while (sysread(SOCKET, $_, 1) ){ # read(2) を使って読む。 printf("$_ [%02X] ", unpack('c',$_)); } print SOCKET "QUIT\r\n"; を試して下さい。 |
>>2373わたなべ 試してみました。 +[2B] O [4F] K [20] ・・・・・・ [3E] [0D] + [2B] 0 [4F] K [4B] [20] [0D] + [2B] 0 [4F] K [4B] [20] [OA] で止まります。 NIFTYもAT&Tもこうした現象なのですが解決方法は無いものでしょうか? |
>>2374 わたなべ 接続時のリプライは +OK....\r USER に対するリプライは +OK \r PASS に対するリプライは +OK \n という変なサーバであることがわかります。 # このサーバは RFC1939 に準拠していないと思います。このサーバ # アプリの名前を教えていただけますか。 で、\r や \n だけでも行末と見なすように、 m/^\.\r\n$/ && last; を m/^\.(\r\n|\r|\n)$/ && last; として下さい (*A)。 で、これだけの対処では多分挙動は変わらないでしょう。 > [OA] で止まります。 ということは、相手が LIST に対するリプライをしていない、 つまり「LIST を受け取ったと解釈していない」ということなので、 やはり SOCKET がテキストモードになっており、 print SOCKET "LIST\r\n"; が print SOCKET "LIST\r\r\n"; となって送信されているのではないかと推測します。 *A の変更を行った上で、再度 binmode(SOCKET) を挿入してみて下さい。 # Windows には詳しくないのですが、これでよいんでしたっけ?>どなたか |
>>2375わたなべ 試してみましたが、状況は変わりませんでした。 AT&TにPOP3のアプリケーションを確認したところ、qmailだそうです。 サーバーのOSは、教えてくれませんでした。 よろしく御願いします。 |