68user's page 掲示板

Prev< No. 2315〜2403> Next  [最新発言に戻る] [過去ログ一覧]
No. 2315 # まさお 2001/11/28 (水) 11:19:44
>68userさん
ありがとうございました。
いろいろ複雑ですね。ますます考えることが多くなってきました。

要はUNIXからアプリケーションの画面(スナップショット)を印刷する処理を
考えているところなのです。
プリンタがEPSON LP8200LP2 でOSがSolaris2.6です。

画像なので、以前教えていただいたようにImage Magickなどの変換ツールを
あとからインストールしないとダメなようすね。
OSの方にあらかじめ組み込まれているコマンドとかがないのか探しているんですけど、
みつかりません。「jtops」というコマンドがOSにあるのですが、これはテキスト専用
でしょうか。
あと、教えていただいたLIPSやESC/PAGEというメーカーの制御コードもテキスト
専用なんですよね?

画像の印刷はやはりPostscript変換ということですよね。

たびたび失礼しました。

No. 2316 # 68user 2001/11/28 (水) 13:02:21
>>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 でもできます。

No. 2317 # まさお 2001/11/28 (水) 15:40:30
>68user さん
ありがとうございました。
勉強になりました。

No. 2318 # ken 2001/11/28 (水) 16:05:37
ネットワークプログラムなのですが、エラーメッセージとしては、
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と
うっても、上記のようなエラーが返ってきます。ヘッダーファイル
が同じディレクトリーにあるのにこのようなメッセージが返ってくる
ということは、やはりどこかに、なんらかの間違いがあるということ
でしょうか?よろしくお願いいたします。

No. 2319 # 68user 2001/11/28 (水) 17:58:16
>>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 になって
いるわけです。本に、ヘッダファイルやソースファイルをどういう
ディレクトリ構成で置きなさい、という記述はありませんか?

No. 2320 # 68user 2001/11/29 (木) 00:03:18
>>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 に
変わっています。

んで、ここを書き換えるとコンパイルが通りました。

No. 2321 # lee [E-mail] 2001/11/29 (木) 23:13:35
.tgzとして拡張子があるファイル、どう展開しますか?

No. 2322 # pon 2001/11/30 (金) 10:39:35
ひとつ教えてください。
Windowのダンプのコマンドの一般的な使い方は、
xwd -out display.xwd
と入力し、そのあとにダンプしたいWindowをマウスで選択しますが、
このとき、ダンプをとりたいWindowをマウスで指定するのではなく、
プログラム上で指定したいのです。(たとえば、Window上に「印刷」ボタンを設け、それが押されたら今アクティヴなWindowを印刷する、とか。)
そういった処理を行うこと可能なのでしょうか?

No. 2323 # kura 2001/11/30 (金) 10:55:29
はじめまして、
ネットワークプログラミング駆け出し者です。
このような、すばらしいHPを開かれている皆様に感謝致します。
とても、参考になります。
これからも、宜しくお願いします。

No. 2324 # なっち 2001/11/30 (金) 13:44:59
かなり勉強になりました。
telnetのところでGET index.html HTTP/1.0をやっても403エラーと
出てしまいます。どうしたら、うまくいくか教えてください。
お願いします。

No. 2325 # zone [E-mail] 2001/12/04 (火) 13:55:08
cookの作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?の作成はどの様にすればいいですか?

No. 2326 # ひよっこ 2001/12/04 (火) 14:43:58
はじめまして。
最近unixを触りだしたひよっこです。
大変素晴らしいHPでとても助かります。
実は、unixのシステム管理業務の一環として時間別/日別のcpuの使用率及びメモリ使用率を調べるコマンドを探しています。
cpu使用率はsar -Aでデータを取る事が出来たのですが、メモリ使用率
が分かりません。
どうしてよいのか途方に暮れています。良きアドバイスを頂けないでしょうか?

No. 2327 # ふくし [E-mail] 2001/12/04 (火) 19:36:21
いつもお世話になっております。Perl で助けてください。
0x00 から 0xff までループ、というつもりで、

    for ("\x00".."\xff") {
        ...
    }

とやってますが、\x00 のとき1回だけやって終わるみたいです。
なじぇ?(?.?) どなたかお願いします。

No. 2328 # 68user 2001/12/04 (火) 21:24:48
>>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", $_);
    }
あたりで。

No. 2329 # ふくし [E-mail] 2001/12/05 (水) 00:28:02
いつもお世話になっております。
>実は本当にやりたいのは
ばっちりです、、;;;

No. 2330 # しんベエ 2001/12/05 (水) 16:53:48
はじめまして。
ここのプログラムは凄く参考になり助かっています。

サンプルプログラムの間違いなんですが、
http://jfx.startshop.co.jp/~68user/net/module-2.html
にある、モジュールを使ったマルチスレッド版echoプログラムの
31行目「if ( fork() ){」は、
正しくは「if ( $pid = fork() ){」ですよね?

No. 2331 # なっち 2001/12/05 (水) 18:14:10
お答えありがとうございました。
かなり役に立ってます。すごいです。
また、質問何ですが、UNIXで壁紙を自分のもっている画像にしたいので
すが、xvコマンド以外で何か良い方法ありませんか?

No. 2332 # わたなべ 2001/12/06 (木) 02:51:39
はじめまして。
このページではいつも色々と勉強させて貰っています。

さて、質問なのですが、今現在CVSにてあるプロジェクトを管理しており、
そのリポジトリをcvswebにて閲覧出来るようにしようとしているのですが、
ある特定のファイル達の中身を表示しようとしたときに、
cvs checkout: cannot exec co: No such file or directory
cvs checkout: could not check out xxx/yyy/Zzz.java
という様なメッセージが出てしまいます。
CVSも使い始めたばかりのため、何が原因なのかが分かりません。
もし良かったら何かヒントや、cvswebに関しての解説があるような
ページがありましたら教えていただけると嬉しいです。

よろしくお願いします。

No. 2333 # 68user 2001/12/06 (木) 04:11:41
>>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

No. 2334 # わたなべ 2001/12/06 (木) 13:05:37
渡辺です。
>>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での事をお許し頂けるなら、何がアドバイス等を頂けたら嬉しいです。
結果報告もきちんとしますので、よろしくおねがいします。

No. 2335 # わたなべ 2001/12/06 (木) 14:02:08
>>2334 わたなべ
での書き込みにある、>>2322は>>2332の間違いです。
重ねてお詫びします。申し訳ありません。

No. 2336 # 68user 2001/12/06 (木) 14:58:28
>>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
となります。

No. 2337 # aki 2001/12/06 (木) 15:18:16
特定の一般ユーザをroot権限と同様な権限を与えたいのですが、
設定方法を教えてもらえないでしょうか。
/etc/groupのファイルのrootグループに追加するだけで
はいけないのでしょうか。

No. 2338 # わたなべ 2001/12/06 (木) 16:29:03
度々すいません。
>>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 を動かすようにもしてみたのですが、それでも何も状況は変わりませんでした。

No. 2339 # わたなべ 2001/12/06 (木) 16:31:23
>>2338 わたなべ

>例えば nobody なら su nobody してから checkout してみて下さい。CGI は nobody で動いています。

>例えば nobody なら su nobody してから checkout してみて下さい。
CGI は nobody で動いています。
と訂正させてください。
毎度毎度申し訳ありません。

No. 2340 # 68user 2001/12/06 (木) 17:09:12
>>2332 わたなべ
> cvs checkout: cannot exec co: No such file or directory
ん〜、これってもしかして、単に co(1) が見付からないって
言ってるのかな? co(1) にパスは通ってます?

# って、どういうときに co(1) が使われるのかいまいちわかってませんが。
## これが原因なら、かなり的外れなことを言ってたことになるなぁ。

No. 2341 # わたなべ 2001/12/06 (木) 17:47:06
>>2340 68user
>ん〜、これってもしかして、単に co(1) が見付からないって
>言ってるのかな? co(1) にパスは通ってます?

co(1) という書き方が何を指すのか、わからないのですが、
which co
で得られるパスを、 cvsweb.conf の $command_path にコロンでつなげて
記述すればいいんですよね?
一応それはやってあります。
CVS も RCS も、root が入れたものではなく、ユーザ権限でインストール
したもので、それらをユーザの ~foo/cgi-bin/cvsweb/ で使おうと
しているのですが、その辺りに問題があったりしますか?

No. 2342 # 68user 2001/12/06 (木) 18:35:12
>>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/

No. 2343 # わたなべ 2001/12/06 (木) 20:15:55
>>2342 68user
>…と書いたところで今気づきましたけど、
>> CVS : 1.9
>古いです。最新版は cvs-1.11.1-p1 のようですが、最低でも cvs-1.11
>にして下さい。ここが一番怪しいかな。
cvs-1.11をインストールしてみましたところ、無事にcvswebも問題なく
動き出す様になりました。
最初に無礼を働いてしまったにも関わらず、解決まで長々と
付き合って頂き、本当にありがとうございました。

これからもちょくちょく来て、勉強させて頂きます。
ありがとうございました。

あと、ちょっとメインの話とはずれるのですが、
>>2340 68user
にあった
>co(1)
というのはどのような時に書く方法なのでしょうか?

No. 2344 # 68user 2001/12/06 (木) 20:46:58
>>2343 わたなべ
> 無事にcvswebも問題なく動き出す様になりました。
それはよかったです。バージョンは? と聞いておきながら
古いのを見落としていたのは失敗でした。

>> co(1)
> というのはどのような時に書く方法なのでしょうか?
セクション番号を表します。セクション 1 はコマンドなので、
「co(1)」は「コマンド co」という意味です。
# http://X68000.startshop.co.jp/~68user/unix/pickup?man

No. 2345 # わたなべ 2001/12/07 (金) 00:07:54
ありがとうございます。
>>2344 68user
>セクション番号を表します。
あ、すでに書かれているところがありましたか…。ちゃんと見てから
質問しないとダメですね…。本当にすいません。
今回色々勉強させて頂きました。
本当に感謝感謝です。

なんだか、頼りっぱなしだったのでちょっと一人で勉強してきます。
また何かあったら質問しにくるかもしれませんが、その時はよろしく
おねがいします。

No. 2346 # ゆき 2001/12/07 (金) 20:10:52
はじめまして。ゆきと申します。当方の環境は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();
}
---------------------------------------------------------
何でも良いので、何かお気付きのことがありましたら、教えて下さい。
よろしくお願い致します。

No. 2347 # ふくし [E-mail] 2001/12/07 (金) 21:08:54
>2346 ゆきさんはじめまして
iostream じゃなくて iostream.h、
string じゃなくて string.h だと思います。
h は Header に通常つく拡張子です。

No. 2348 # ふくし [E-mail] 2001/12/07 (金) 22:42:14
とかいって、<iostream> だけの書き方もあるんですね。
手元の cpp ソースは、<iostream.h> でコンパイルできていたのを
<iostream> だけにしたら同様のエラーが出たので、
「.h を付けてみる」をトライする価値はあると思いますが。

No. 2349 # ゆき 2001/12/09 (日) 01:32:16
>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もあったと認識して
よろしいのでしょうか?もしそうなら、それらが入っていない私の
環境は、やはりインストール時の失敗ということでしょうか・・・

もしよろしければ、お教え頂けませんか?よろしくお願い致します。

No. 2350 # 68user 2001/12/10 (月) 11:00:48
>>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

結局のところ、うまくインストールできていないのではないかと思います。

No. 2351 # yama 2001/12/10 (月) 12:45:31
はじめまして。yamaと申します。
Perlで困っています。
STDOUTの初期化の方法がわかりません。
print文にてhtmlを出力していますが、途中でエラーが発生
した場合、出力済みの情報を初期化し、エラーメセージを出力したい
と考えています。
*STDOUT="";
としましたが、エラー表示以前の分も出力されます。
このようなことは不可能なのでしょうか。
プロバイダ環境はUNIXでApacheのサーバです。
なお、UNIX、Apache、Perlのバージョン
等詳しくは聞いていません。

No. 2352 # 68user 2001/12/10 (月) 13:07:35
>>2351 yama
> このようなことは不可能なのでしょうか。
不可能です。stdout に出力したものは既に出力済かもしれませんし、
まだバッファに溜っているかもしれませんが、それをクリアする
方法はありません。出力済かどうかを判断する方法もありません。

# Java Servlet だとできるんですけどね。

というわけで、自前でバッファリングしましょう。

No. 2353 # yama 2001/12/10 (月) 15:29:39
>>2352 68userさんへ

お返事ありがとうございます。
「不可能」ですか。
ロジックを変更し、必要なチェックを先にするようにします。

今後ともよろしくご指導ください。

No. 2354 # ゆうすけ [E-mail] 2001/12/10 (月) 17:30:08
いつも、お世話になっています。ダウンロードについてなんですが、
.lzhのファイルをコンパイルすることは、UNIXではできるのでしょうか。
もしできるようであれば、ダウンロードの仕方を教えてください。
ちなみに、僕は「Solaris2.6」を使っています。お返事お願いします。

No. 2355 # ふくし [E-mail] 2001/12/10 (月) 18:09:03
>2354
ゆうすけさん、はじめまして。
「lzh のファイルを UNIX でコンパイルする」
と言われると複数に解釈できて、
1)UNIX 上にある複数のファイルを固めて lzh の圧縮書庫を作る
2)どっかから持ってきた lzh の圧縮書庫を展開して、
        その中の C とかのソースツリーをコンパイルする
のどっちでしょう。

で、どっちもできます。ただし条件があって、お使いの Solaris に
lha というプログラムがあるかどうかです。
コマンドラインで「lha」と打ち込んでみてください。
ある場合は使い方が表示され、ない場合は「ない」と起こられます。

で、ある場合はそれを使い、ない場合はインストールします。
で、使い方/インストールの仕方ですが、
とりあえず「lha」というコマンドの名前までわかったので、
あとは検索するなりしてがんばってみて、
どうしてもダメだったらまた聞いてください。
そのとき上の1)なのか2)なのかそれ以外なのかも教えてください。

>2350
68userさん、フォローありがとうございます。
ていうかいつもご苦労様です。
ちょっとでも負担を軽減しようとがんばってみたんですが
役に立たず、申し訳ありません ;;;

No. 2356 # ゆき 2001/12/10 (月) 18:42:36
>>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*は検索しても無いような状況でした。やはり再インストール
をしてみようと思いますが、上記フォルダ階層はそもそも間違いで、
正しいインストール先というのは、インストール時に指定できるように
なっているものなのでしょうか?何度も申し訳ありませんが、よければ
その辺りのことを詳しくお教え願えませんでしょうか?
よろしくお願い致します。

No. 2357 # 68user 2001/12/10 (月) 19:11:40
>>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

No. 2358 # 68user 2001/12/10 (月) 22:38:31
>>2337 aki
おっと、見逃していました。

> /etc/groupのファイルのrootグループに追加するだけで
> はいけないのでしょうか。
root グループにはなれますが、root にはなれません。
sudo など、setuid などで検索してみてください。

No. 2359 # kanji 2001/12/11 (火) 14:58:52
はじめまして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エラーが出ます。ソースツリーが無いと言われます。
ソースツリーとはどのようなもので、どうやってインストールすれば良いのでしょうか。
よろしくお願い致します。

No. 2360 # ふくし [E-mail] 2001/12/11 (火) 15:26:42
>>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 です。

No. 2361 # 68user 2001/12/11 (火) 15:34:40
>>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エラーが出ます。
具体的にどういうエラーが出るかをちゃんと書けば、何が問題か
わかる人にはわかるでしょう。

# 僕は残念ながら わからない人です。

No. 2362 # kanji 2001/12/11 (火) 15:48:57
>>2360 ふくし
>>2361 68user
すみません、わかりました。
ありがとうございました。

カーネルソースの展開が抜けているのでしょう。
早速やってみます。

No. 2363 # inaba 2001/12/12 (水) 15:01:21
初めまして、inabaと申します。

>>2359 kanji
3com だったら、ディフォルトで認識してくれると思いますが…。
ただ、network と pcmcia の起動順が逆なので失敗しているのかも。
# cd /etc/init.d
# ./pcmcia restart
# ./network restart
と入力してみてください。
# ifconfig
で、eth0 が認識されていませんか?
見当違いだったらすみません。

No. 2364 # わたなべ [E-mail] 2001/12/12 (水) 19:16:45
はじめまして、渡邊と申します。
ネットワークプログラムに興味があり、POP3 クライアントを作ってみよう(2)の POP3 クライアントサンプルを動作させてみました。
お聞きしたいのは、このままでちゃんとメールが表示されるプロバイダーと表示されないプロバイダーがあり、ニフティでは途中で固まってしまいます。認証までは動いているようで、LISTので止まっているようです。
どうすれば、いいか教えていただけませんか?

No. 2365 # 68user 2001/12/12 (水) 22:11:13
>>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);
という行を追加するとどうなりますか?

No. 2366 # kuw 2001/12/12 (水) 23:55:57
はじめまして。いつも勉強させてもらっています。

>>2364 わたなべ
> LISTので止まっているようです。
私も、pop3 クライアントを自作したときに、同じことを経験しました。
そのときは、pop3 サーバが NT で、
> +OK IMS POP3 Server 0.87 Ready
というものだったのですが、
LIST の返事に、"." のみの行がなかったのです。
> +OK 0 message (0 octets)
> 0 messages (0 octets)
こんな感じでした。

No. 2367 # kuw 2001/12/13 (木) 00:01:49
>>2366 kuw
>LIST の返事に、"." のみの行がなかったのです。
補足です。
その時は、LIST のかわりに STAT を使うようにして回避しました。

No. 2368 # わなたべ 2001/12/13 (木) 00:13:29
>>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で直接タイプすればリストも問題ありません。
よろしくお願いします。

No. 2369 # わなたべ 2001/12/13 (木) 00:22:04
>>2364わたなべ
kuwさんありがとうございます。
STATを使う件、本日世が明けたら試してみます。
ありがとうございます。

No. 2370 # 68user 2001/12/13 (木) 01:07:12
>>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: .

です。

No. 2371 # kuw 2001/12/13 (木) 06:44:11
>>2370 68user
>それは mail box にメールがたまっていなかったときのみ . が
>ないのでしょうか? あるいはメールがたまっていても . がない
>のでしょうか?
メールがたまっていなかったときのみです。
メールがたまっているときは、
> +OK 1 messages (1146 octets)
> 1 1146
> .
となります。

>また、その POP3 サーバアプリケーションの名前は
>何かわかりますか?
EMWAC の IMS POP3 Server 0.87 です。
5, 6 年前に NT にインストールして以来、そのまま使っているので、
かなり古いものだと思います。
# この数年、NT を全くいじっていないので、最近の事情はわかりませんが・・・

>ちなみに . をもってレスポンスの終了と見なしている
もちろん、これは正しい仕様だと思いますし、
同じ仕様の MUA やメールチェッカーも多いと思います。

No. 2372 # わたなべ 2001/12/13 (木) 09:57:20
>>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

No. 2373 # 68user 2001/12/13 (木) 13:02:37
>>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";

を試して下さい。

No. 2374 # わたなべ 2001/12/13 (木) 15:01:43
>>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もこうした現象なのですが解決方法は無いものでしょうか?

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2375 # 68user 2001/12/13 (木) 15:27:01
>>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 には詳しくないのですが、これでよいんでしたっけ?>どなたか

No. 2376 # わたなべ 2001/12/13 (木) 16:54:32
>>2375わたなべ
試してみましたが、状況は変わりませんでした。
AT&TにPOP3のアプリケーションを確認したところ、qmailだそうです。
サーバーのOSは、教えてくれませんでした。
よろしく御願いします。

No. 2377 # ARGUN 2001/12/13 (木) 21:04:50
初めまして。初めてなのに、こんな事を書くのはあつかましいとも思うんですけど、どうにもならないのでフ゜ロク゛ラムを教えて欲しいんです。
実は、課題がでたんですけど分からないので。
内容ですが
Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。     と言う物です。   それで、
#include <stdio.h>
#include <stdlib.h>

main(int argc, chr*argv[])
{
int i;
FILE *fin;
char ss[256];

if(fin=fopen("sourse","r") == NULL){
printf("オーフ゜ン出来ない.\n");
exit(1);
}
char(

までは出来ました。それから先が全くわかりませんので、宜しくお願いします!

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2378 # kuw 2001/12/14 (金) 00:06:24
>>2373 68user
>その POP3 サーバのバグ
その通りです。
しかも、今回の件には、まるで関係ない話みたいですね。失礼しました。

>>2377 ARGUN
>Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、他のファイル(trans.c)に書き出す。
ならば、
cat sourse.c | tr a-z A-Z > trans.c
で良いのでは?

No. 2379 # 68user 2001/12/14 (金) 11:44:19
>>2376 わたなべ
> 試してみましたが、状況は変わりませんでした。
ほほぅ、そうですか。それは困りましたね。

> qmailだそうです。
qmail 付属の qmail-pop3d かな? djb モノがそんな挙動を
するのはあまり考えにくいですが、telnet ではできている
のですから、怪しいのは改行コードです。

現在は sysread で読んでいるのですから、受け取ったデータは
即座に表示されるはずです。ということは、何も表示されない=
送ったリクエストが正しく解釈されていないということなので、
    print SOCKET "LIST\r\n";

    print SOCKET "LIST\n";
にしてみたり、いろいろ試してみて下さい。

どうにもならなかったら、試したスクリプトを見せて下さい。

>>2377 ARGUN
> Cのフ゜ロク゛ラムファイル(sourse.c)の英小文字をすべて英大文字に変換し、
> 他のファイル(trans.c)に書き出す。
まずは、sourse.c の内容を trans.c にコピーするところから
やってみては。

No. 2380 # /tk 2001/12/14 (金) 14:50:00
>>2364 わたなべ
> LISTので止まっているようです。
うちのサーバが qmail + vpopmail だったのでテストしてみたところ
同様の現象が再現しました。

うちの場合
      print SOCKET "LIST\r\n";
の直前の行に
      sleep 1;
を挿入したらうまく動きましたので
試してみてはいかかでしょう。

No. 2381 # わたなべ 2001/12/14 (金) 20:50:32
>>2380わたなべ
/tkさんのアドバイスどおりに
sleep 1;
を入れたら無事に動きました。
本当に有り難うございました。
大変お騒がせしましたが、これで落ち着いて眠れます。
今後ともよろしく御願いします。

No. 2382 # ARGUN 2001/12/16 (日) 22:07:44
68userさん。Kuwさん。有難うございます。
でも、長く入院してたせいで冗談抜きで全く分からないんです。
コピーってどうやるんですか?
甘えだとは思うのですが、迷惑でしょうがプログラム載せて貰いたいのですがおねがいします。聞けるような仲間がいないので。

No. 2383 # kuw 2001/12/17 (月) 04:35:58
>>2382 ARGUN
> プログラム載せて貰いたい
--- a2A.c ここから ---
main () {
        system("tr a-z A-Z < sourse.c > trans.c");
}
--- a2A.c ここまで ---
a2A.c をコンパイルしてできた実行ファイルを、
sourse.c と同じディレクトリにコピーして実行してみてください。
運が良ければ、お望みの trans.c が作成されます。

とりあえず、課題はこれで良いとして、本気でプログラムの勉強を
したいのならば、68user さんのアドバイスを参考にがんばってください。

あとは、
>>2230 68user
> - 課題だからといって、問題をそのまま掲示板に書き込んでも反感を買うだけ、
>  ということを書き込む前に推測できるようになる。
> - 仮に課題だとしても、そうは見えないようにうまくカムフラージュ
>  できるような文章力を身につける。努力しているという姿勢を
>  アピールする。
という金言も参考にされると良いでしょう。

No. 2384 # 68user 2001/12/17 (月) 07:40:47
>>2382 ARGUN
google で「C言語 ファイル コピー」などと検索すれば、
サンプルプログラムなんてたくさん見付かります。
「C言語 小文字」だってたくさん見付かります。

http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
で質問するのもよいでしょう。

ここで回答をもらえることを期待するよりもそっちの方が早いです。

>>2380 /tk
> sleep 1;
うーむ、改行コードは大外しでしたか。ということはその POP サーバは
リクエストを 1行だけ読んでいるのではなく、select か何かでバッファに
たまっているリクエストを全て解釈しようとしていた、ということですかね?

本来 USER 送って +OK を受け取って、PASS 送って +OK を受け取って、その後
LIST を送らねばならないところを、一気に USER、PASS、LIST を送って、その後
リプライを受け取るという手抜きをしていたからまずかった…と。

No. 2385 # hiro 2001/12/18 (火) 13:04:35
こんにちは。
環境は
OSはSolaris 2.6、printerはEPSON LP8200PS2(PSプリンタ)です。

質問は、
lpコマンドで印刷用紙のサイズを指定したいのです。
HELPなどを見てもそれらしきoptionがないのですが、用紙サイズを
A4とかB4とかに任意に設定するoptionはありませんか?

よろしくおねがいします

No. 2386 # cgi超初心者 2001/12/18 (火) 14:35:51
はじめまして。最近cgiの勉強をはじめたんですが、なかなかうまくいきま
せん。
さっそく質問ですがローカルでcgiの動かし方がわからないんです。一通り
関連サイトを回ってみたのですがどうしても駄目なんです。例えば
hello-worldを実行すると

#!C:/Perl/bin/perl print "Content-type:
text/html\n\n; print ""; print "Hello world.; print ";

こうなってしまうんです。プロバイダがcgiの使用を許可してないので
それが原因なのでしょうか?もしそうならなにか方法を教えてください。
よろしくお願いします。

No. 2387 # cgi超初心者 2001/12/18 (火) 14:41:30
ちなみに環境は
windows98,internetexplorer5,プロバイダはocnです。
よろしくお願いします

No. 2388 # CZ 2001/12/18 (火) 18:29:52
>>2386 cgi超初心者
>プロバイダがcgiの使用を許可してない
のは全く関係ありませんので安心してください。
ローカルでCGIの動作確認をする方法を初心者向けに説明したサイトを紹介しておきます。

http://members.tripod.com/~tyanko/s_mokuji.html

No. 2389 # 68user 2001/12/19 (水) 01:45:36
>>2385 hiro
lp -f で できませんでしたっけ。

No. 2390 # スナフキン 2001/12/19 (水) 02:52:22
つかぬ事をお伺いしますが、perlで <+ でファイルオープン時に、開こうとする
ファイルが存在しないとエラーとなりますが、以下の様な処理をしました。
が、どう見てもカッコ悪い(笑)のでこんなケースにはどんな処理をしているか
お聞きしたいのですが・・・

if(!-e $dat_file){# 存在しない時に作成
    if(!open(DAT, ">$dat_file"))
        { &error('オープンエラー', "データファイルの生成に失敗しました。[$dat_file]");}
    close(DAT);
}

#改めて開きなおし
if(!open(DAT, "+<$dat_file"))
    { &error('オープンエラー', "データファイルのオープンに失敗しました。(1)");}
while(<DAT>){
    chomp;
    push(@record, $_);
}

No. 2391 # 68user 2001/12/20 (木) 17:44:24
>>2390 スナフキン
open(DAT, "+<$dat_file") || open(DAT "+>$dat_file") || &error('..');
while(<DAT>){
    ..
}

ってのはどうでしょうね。

あと、perlopentut(1) に参考になることが書いてあるかも
(書いてないかも) しれません。

No. 2392 # スナフキン 2001/12/20 (木) 20:26:30
ウチのマシンの perl はバージョンが古く(5.004_04)なので
perlopentut の情報は見つけられませんでした。

しかしキーワードを検索するといろいろと情報を得る事が出来ました。
if(!open〜 は自分なりの書式なので良く使っていましたが、perlで
杓子定規に覚える事にはあまり意味が無いですね(笑)
いままで使った事の無い sysopen もいろいろ試してみます。

的確なキーワードありがとうございます。

参考になったURL
http://www.wingworld.co.jp/forum/cgi/messages/1931.html
う〜んバージョンを新しくしなければ・・・

No. 2393 # /tk 2001/12/20 (木) 22:11:22
>>2384 68user
> select か何かでバッファに たまっているリクエストを
> 全て解釈しようとしていた、ということですかね?
この辺の仕様(というか実態)は知りませんが
サーバにどのようなリクエストが実際に渡ったのかを
調べるのが、原因究明の早道となるような気がします。
# 実際どのようにすれば, それを調べられるかは分かっていません。

今回の件に関しては, なんとなく
> 一気に USER、PASS、LIST を送って、その後 リプライを受け取る
のが原因かな。 と特に根拠も無くアタリをつけてテストをしました。

別に sleep である必要は全然無いのですが
個別にリプライを受けて -ERR だったら再入力な
スクリプトを書くの面倒だったので…
(あと環境が Windows でしたので)


>>2390 スナフキン
> こんなケースにはどんな処理をしているか
実際にファイルが存在していないのですから
オープンエラーで困る事は無いのだし
むしろエラーになってくれなくては困るという
考え方をしています。

…↑ゴミレスですね。すみません。

No. 2394 # Ka23 2001/12/21 (金) 18:40:42
UNIX プログラミング FAQが以下に移転しています。
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html

http://www.adl.nii.ac.jp/~moro/
暫定っぽいですが(^^;

No. 2395 # Suresh [E-mail] 2001/12/27 (木) 18:08:12
Cクラス(HP UNIX版)ハードDiskをBクラス使用するとき何か
設定必要でしょうか ?
教えって下さい。

No. 2396 # hogehoge 2002/01/02 (水) 09:59:55
access.logは下記のようなもの。$1はエポックタイム
(1970/1/1 00:00:00からの経過秒数)で$3はアクセスした端末のIP。

1009379443.542 20 192.168.16.17 TCP_HIT/200 1694 GET http://www.al4a.com/images/911.gif - NONE/- image/gif
1009379443.604 24 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif
1009379444.170 11683 192.168.16.17 TCP_REFRESH_HIT/200 59687 GET http://www.al4a.com/links.html - DIRECT/www.al4a.com text/html
1009379446.523 2979 192.168.16.17 TCP_HIT/000 11027 GET http://www.al4a.com/images/al4av2.jpg - NONE/- -
1009379446.526 1472 192.168.16.17 TCP_MISS/000 0 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com -
1009379447.026 63 192.168.16.17 TCP_HIT/200 15976 GET http://www.al4a.com/banners/gf1.gif - NONE/- image/gif
1009379447.364 16 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif
1009379448.331 967 192.168.16.17 TCP_MISS/200 9626 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com image/gif
1009379449.997 1504 192.168.16.17 TCP_HIT/200 20456 GET http://www.pornleo.com/banner/pussy10-29.gif - NONE/- image/gif
1009379450.256 3056 192.168.16.17 TCP_HIT/200 15679 GET http://www.al4a.com/images/al4av2.jpg - NONE/- image/jpeg
1009379453.262 148 192.168.16.17 TCP_HIT/200 7049 GET http://www.al4a.com/banners/fc1.jpg - NONE/- image/jpeg
1009379453.301 38 192.168.16.17 TCP_HIT/200 9328 GET http://www.al4a.com/banners/am1.gif - NONE/- image/gif
1009379454.056 1963 192.168.16.17 TCP_HIT/200 21921 GET http://al4a.free6.com/free6.gif - NONE/- image/gif

これを集計して

date time user数
----------------------
2001/12/28 00:00 0
2001/12/28 00:30 0
2001/12/28 01:00 5
2001/12/28 01:30 6

のようにしたいのです。awkファイルは3つあり、それをshellに記述して
一括処理しようとしています。
#syukei.sh
#!/bin/sh
./syukei1.awk access.log|./syukei2.awk|./syukei3.awk > file

#syukei1.awk
#!/bin/gawk -f
{
hour=strftime("%H",$1);minute=strftime("%M",$1);second=strftime("%S",$1)
base=$1-(hour*3600+minute*60+second)
        for(i=1;i<=48;i++){
                if((base+1800*(i-1) <= $1) && ($1 < base+1800*i)){
                        print strftime("%Y/%m/%d %H:%M",base+1800*(i-1)),$3,1
                }
        }
}

#syukei2.awk
#!/bin/gawk -f

{
sum[$2,$3] += $4
}

END {
        for(item in sum){
                split(item, t, SUBSEP );
                printf("%s %s %s %d\n",$1,t[1],t[2],sum[item]);
        }
}

#suykei3.awk
#!/bin/gawk -f
{
        if(length($2) > 0){
                kazu[$2] ++;
        }
}

END{
        for(i in kazu){
                print $1,i,kazu[i]
        }
}

といった感じです。syukei1.awkで
2001/12/28 00:00 192.168.1.2 1
2001/12/28 00:00 192.168.1.1 1(とりあえずエポックタイムを現在時刻に変換し、秒の項はprintしない。あとはIPaddressを取る)
のように加工します。(最後の1は捏造したもの。後々この数をカウントするので)
syukei2.awkで↑の$4を集計。
2001/12/28 00:00 192.168.1.2 5
2001/12/28 00:00 192.168.1.1 6

2001/12/28 00:30 192.168.1.1 2
2001/12/28 00:30 192.168.1.2 4
のように加工します。(userごとに30分刻みで何回アクセスしたか)
最後にsyukei3.awkで↑の$3を集計。
2001/12/28 00:00 2
2001/12/28 00:30 3
のようにdate time user数という形で出力したいんです。
ただ、ここで今問題になっているのが、例えば2001/12/28 01:00〜2001/12/28 01:30の間に一度もアクセスがなかった場合、
その行が表示されません。アクセスがない場合は2001/12/28 01:00 0 0のように表示したいのですが、
どのようにすればいいでしょうか。また、3つファイルがあるんですが、これを一まとめにすることって可能なんでしょうか。
長くなりましたが、ご教授宜しくお願いします。

No. 2397 # ふくし 2002/01/02 (水) 16:16:42
あけましておめでとうございます。
今年もよろしくお願いします。
>>2396 hogehoge
さん:はじめまして
cronで30分に1回httpを叩くクライアントを作っておいて、
そいつ1回しかアクセスしなかったら0アクセス、
そいつも含めてn回アクセスがあったらn-1アクセスではだめですかねー。

No. 2398 # hogehoge 2002/01/02 (水) 17:12:32
あ…、明けましておめでとうございます。
ふくしさんはじめましてです。

今まではcronを使って30分ごとに集計をとる方法でした。
でも、処理に時間がやたらとかかってしまいまして。
それが1日48回もあるかと思ったら…。
それでプログラムの改善と一括処理に切り替えることにしたんですが。
どうにかならないもんですかね…。ふぅ。

No. 2399 # ふくし 2002/01/02 (水) 19:59:37
>>2398 hogehoge
さん:Perl ですいません。こんなんでできそうです。
要は、
ファイルの各レコードについて、
0:00〜0:30、0:30〜1:00、1:00〜1:30、、の各ゾーンに入っているか調べ、
そのゾーンに入っていたら
ゾーン、IP アドレスをキーに持つ2次元ハッシュの値を1にし、
全件調べた後に各ゾーンごとにいくつ IP がたまっているかを出力しています。
ろくにテストしていませんがバグっていたらすみません。


#! perl -w

use Time::Local; # timelocal 関数を使うために必要なモジュールの宣言

(undef,undef, undef, $mday, $mon, $year, undef, undef, undef) = localtime(time); # 今日が何日か
$step = 30 * 60; # 30分刻み

$next = timelocal(0, 0, 0, $mday, $mon, $year); # 今日の0時0分0秒の時刻(epoch からの秒数)
$start = $next - 60 * 60 * 24; # 昨日の0時0分0秒の時刻

%result = ();
while(<DATA>) {
                ($now, undef, $ip) = split;
                for ($from = $start; $from < $next; $from += $step) { # $from は計算開始の時刻
                                $to = $from + $step; # $to は計算終了の時刻
                                if ($from <= $now and $now < $to) {
                                                $result{$from}{$ip} = 1;
                                }
                }
}

for ($from = $start; $from < $next; $from += $step) {
                $num = keys %{$result{$from}};
                ($sec, $min, $hour, $mday, $mon, $year) = localtime($from);
                $year += 1900;
                $mon++;
                print "$year/$mon/$mday $hour:$min:$sec $num\n";
}

No. 2400 # ふくし 2002/01/02 (水) 20:32:15
すいません、<DATA> でなくて
<STDIN> にして標準入力を渡すか、
ファイルハンドルをオープンしてつかってください。
テスト用のコードを修正しわすれました。

No. 2401 # hogehoge 2002/01/03 (木) 00:57:16
ふくしさんありがとうございます。
Perlをそのまま使うことができないのがとても残念ですが、
まだawkも始めたばっかりで、アルゴリズムの解釈なんかが
多々間違っていると思われ、とても参考にさせて頂きたいと思います。
なんとか、awkに変換、反映させてみたいと思います。
とりあえず、このスクリプトがうまくいったら、次は
Perlをやってみたいと思っています。ありがとうございました。
また何かあったら教えて下さいね。

No. 2402 # 名無しさん 2002/01/03 (木) 19:39:40
>>2401 hogehoge
see http://pc.2ch.net/test/read.cgi/unix/1000303370/130-132n
and
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

No. 2403 # ふくし [E-mail] 2002/01/09 (水) 21:35:24
いつもお世話になります。
CGI.pm でファイルのアップロードをするときの質問です。
html で

<html>
<body>
<pre>
アップロードするファイルを指定してください。
ファイル名は半角英数字で、空白を含まないでください。
</pre>
<form action="fileup.cgi" method="POST" ENCTYPE="multipart/form-data">
ファイル名:<input type="file" name="fname"><br>
<hr>
<input type="submit" value="OK">
</form>
</body>
</html>

というフォームを作って、

#! perl -w
# fileup.cgi

use CGI;

my($form) = new CGI;
print $form->header("text/html");

my($filename) = $form->param('fname');

$filename =~ m|([^\\]+)$|; # Windows のフルパスから基底ファイル名を取り出す
$newfile = "./gooddir/$1"; # gooddir の下に入れる。

open (OUTFILE,">$newfile") or die "Can't make serverside file because $!\n";
while ($bytesread = read($filename,$buffer,1024)) {
                print OUTFILE $buffer;
}
print <<EOD;
<pre>
アップロードが終了しました。ファイル「$filename」は
$newfile としてアップロードされました。
</pre>
EOD

という CGI を呼び出すとうまくいくのですが、
同じ CGI を、呼び出し側のフォームも CGI.pm で作って

#! perl -w

use CGI;
use strict;

my $title = 'ファイルをアップロードしてください';
my $q = new CGI;
print $q->header();
print $q->start_html();
print $q->start_form(-method=>'form', -action=>'./fileup2.cgi', -enqtype=>'multipart/form-data');

print $q->h2($title);

print '変換するファイルを指定し、[実行] をクリックしてください。<br>',
'(空白のあるファイル名、日本語のファイル名は避けてください)<br>',
$q->filefield(-name=>"fname"),
'<br>'x3;

print $q->submit(-name=>'submit',-value=>'実行');
print $q->endform;
print $q->end_html();

とやると、空ファイルが作成されるだけでうまくアップロードできません。
エラーログには何も出ません。
なにがおかしいのでしょうか?
何かおわかりでしたらご教示願います。

Prev< No. 2315〜2403> Next  [最新発言に戻る] [過去ログ一覧]