68user's page 掲示板

Prev< No. 3801〜3835> Next  [最新発言に戻る] [過去ログ一覧]
No. 3801 # どら 2004/06/18 (金) 00:27:52
>>3800 68user
68userさん、レスありがとうございます。
質問に答えさせていただきます。

(1)gcc をインストールしていますか?
gccというもの自体はわかりませんが、fccとccはインストールしてあるみたいです。(すいません、学校のものなので・・・)

(2)Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?)
/opt/SUNWspro/bin/ccはディレクトリの中にありました。

(3)which cc と which ld の結果は?
which cc:/usr/ucb/cc
which ld:/usr/ucb/ld
という結果でした。

(4)echo $PATH の結果は?
/bin /usr/bin /usr/ucb /etc /opt/SUNWspro/bin /opt/FSUNf90/bin /disk2/user/md/gnuplot
という結果でした。

(5)「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc)
いままでの練習ではccでコンパイルしていました。これからもccでコンパイルするつもりです。

(6)実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は?
上にも書きましたが、いままではccのコンパイラでコンパイルしていたので、ccのコンパイラだと思います。

さきほどgccについて調べた所、GNUが関連しているみたいでした。これから先にGNUplotを使用してグラフも書きたいと思っているのですが、
それについても何かアドバイスをいただければありがたいと思います。よろしくお願いします。

No. 3802 # 68user 2004/06/18 (金) 01:07:24
>>3801 どら
あらそうですか。予想と外れていたのでもうひとつ追加で質問。

>>3790 どら
> ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:...
ここだけでなく、コンパイルしてからコンパイルが終わるまで全ての
部分を見せてください。Makefile を使っているにせよ、自分でタイプ
したにせよ、とにかく全部見せてください。

> これから先にGNUplotを使用してグラフも書きたいと思っているのですが、
紛らわしいですが、gnuplot は GNU とは関係ありません。

GNU というのは、フリーなソフトウェアが大好きな FSF
という団体が提唱するソフトウェアのライセンス方式の
ことを指します。gcc も GNU ライセンスで配布されています。
しかし gnuplot はそうではありません。

あと、gcc と gnuplot は関係ないです。gcc はコンパイラ。
gnuplot はグラフ描画ソフト。

No. 3803 # 2004/06/18 (金) 10:59:55
はじめまして、こんにちは。いきなりで非常に申し訳ないのですが、socketのインクルードファイルはどこでダウンロードしたらいいのでしょうか?もしくは、どのOSになら入っているのでしょうか?

No. 3804 # 68user 2004/06/18 (金) 11:12:39
>>3803
わたしの知る限りでは、UNIX 系であれば標準で入っています。

Windows 系であれば、VC++ や C++ Builder などのコンパイラに
添付されているのかな?

No. 3805 # 蒲鉾 2004/06/18 (金) 11:41:29
UNIXの<sys/socket.h>の様なファイルは
windowsでどこにあるのですか
windowsで<sys/socket.h>をインクルードしてもファイルが開けない
というようなメッセージがでてしまいます。

No. 3806 # kou 2004/06/18 (金) 19:37:06
> 秘密鍵: e, n
> 公開鍵: d, n
> 暗号化: (平文^e)%n
> 復号化: (暗号文^d)%n
>
>として、今、平文と e が不明だとします。何をどうすると、
>何がどういうふうに循環すると考えておられますか?
nを生成するのがp,qで、それらの最小公倍数がe,dだという私の認識自体が間違っていたのでしょうか^^;
一定の頻度で循環しているから、それ以内の適当な数eでべき乗しても補完関係にあるd(最小公倍数-e)で復号化できる。
平文に「1,2,3・・」といった具合に数を代入していけば循環周期が分かるのでは?と思ったのです

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

No. 3807 # 68user 2004/06/19 (土) 00:23:45
>>3805 蒲鉾
> UNIXの<sys/socket.h>の様なファイルはwindowsでどこにあるのですか
winsock.h ですが、Windows の場合は他にもいろいろと書き方が
異なります。「winsock」で検索して、よさそうなサンプルを
探してください。

もっとも信頼できると思われるサンプルは
    http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/
でしょうが、ライブラリ化してあるのでわたしは初心者には
わかりやすいとは思いませんが、もし理解できるならこれを
参考にするのがよいでしょう。

>>3806 kou
> nを生成するのがp,qで、それらの最小公倍数がe,d
誤りと思われます。
    http://x68000.startshop.co.jp/~68user/net/crypt-2.html
の「RSA の本当のところ」を読んでください。

もう少し正確に、かつ数学的に書くと、
    p,q: 素数
    n: n=pq
    e: 1<e<(p-1)(q-1) かつ gcd(e, (p-1)(q-1))=1 を満たす自然数
    d: 1<d<(p-1)(q-1) かつ de≡1 (mod (p-1)(q-1)) を満たす自然数
として求めます。

# gcd(e, (p-1)(q-1))=1 は、e と (p-1)(q-1) が共通の約数を持たないということ。
# de≡1 (mod (p-1)(q-1)) は、d*e を (p-1)(q-1) で割った余りが 1 であるということ。

No. 3808 # どら 2004/06/19 (土) 00:52:56
>>68user
何度もありがとうございます。

“ex3-2.c”というファイルを“keisan3-2”としてコンパイルした結果を載せさせていただきます。
--------------------------------------------------------------------------------
tds1% cc -o keisan3-2 ex3-2.c
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
"ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
---------------------------------------------------------------------------------

以前実行した時はうまくいったのですが、いつの間にかできなくなりました。
あと、上の文章の中で“16行目:〜ありません”という警告文もどのプログラムにも発生するみたいです。(この警告も以前はありませんでしたし、ファイルの中身はかえてないはずです。)
一応、簡単な文章でもうしわけないのですが、プログラムも載せさせていただきます。(教科書のコピーです…)

---------------------------------------------------------------------------------
/* 【例題3.2】 rei3_2 */

#include <stdio.h>

main()
{
    int a,b;

    printf("異なる2つの整数を入力してください--->");
    scanf("%d %d",&a,&b);
    if(a > b)
    printf("%d --- BIG\n",a);
    else
    printf("%d --- BIG\n",b);
    return(0);
}
-----------------------------------------------------------------------------------

よろしくお願いします。

No. 3809 # 68user 2004/06/19 (土) 01:43:46
>>3808 どら
たびたびすみませんが、
    % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.c
の結果 (全文) を教えてください。

あと、env の結果も教えてください。ホスト名やログイン名などを
公開するのが嫌なら、適当に削ってから提示してください。


これ以上引っ張ると怒られそうなので、一部回答しておきますが、

> ucbcc: 警告: ld が起動される場合は、... 無視されます
> ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
これは警告なので、実行には支障がないはずです。keisan3-2 が
生成されていませんか?

> "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
これは文字通り、ファイルの最終行が改行コードが付いて
いないのでしょう。ファイルの最終行の末尾で改行してください。
ファイル末尾に改行がないとその行を読んでくれないプログラムも
あるので、改行をつける癖をつけておくことをお勧めします。

No. 3810 # どら 2004/06/19 (土) 09:48:43
>>3809 68user
何度もありがとうございます。このミスが見つからないと先に進みづらいので、教えていただけるのなら、どれだけ質問されても怒ったりしません。むしろどれだけでも聞いてください。お願いします。

% sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.cの結果を下に書きます。
------------------------------------------------------------------------------
+ [ -f /usr/ccs/bin/ucbcc ]
+ [ 4 -eq 0 ]
UCB_LIB_DIR=/usr/ucblib
CCS_LIB_DIR=/usr/ccs/lib
USR_LIB=/usr/lib
TYPE=
dopt=
cgdir=
+ [ x = x ]
LD_RUN_PATH=/usr/ucblib
+ export LD_RUN_PATH
+ [ = -Bstatic ]
LIBS=-lucb -lsocket -lnsl -lelf -laio
+ + awk/usr/bin/ls -ln /usr/ccs/bin/ucbcc{print $11}

cclink=/opt/SUNWspro/WS6U2/bin/acc
+ /usr/bin/dirname /opt/SUNWspro/WS6U2/bin/acc
ccdir=/opt/SUNWspro/WS6U2/bin
+ [ != ]
nccdir=/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin
LD_LIBRARY_PATH=/usr/ucblib:/usr/ccs/lib:/usr/lib
+ export LD_LIBRARY_PATH
+ /usr/ccs/bin/ucbcc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SU
NWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude
  -lucb -lsocket -lnsl -lelf -laio
ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS
6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます
。それ以外は無視されます
### コマンド行ファイルおよびオプション (展開済み):
### -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio
### ucbcc: 注釈: LM_LICENSE_FILE = (null)
### ucbcc: 注釈: NLSPATH = /opt/SUNWspro/WS6U2/bin/../lib/locale/%L/LC_MESSAGES/
%N.cat:/opt/SUNWspro/WS6U2/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/usr/ccs/lib/cpp -undef -D__SunOS_5_8 -D__SUNPRO_C=0x510 -Dunix -D__unix -Dsun -
D__sun -D__BUILTIN_VA_ARG_INCR -D__SVR4 -Dsparc -D__sparc -I/usr/ucbinclude ex3-
2.c >/tmp/cpp.20856.0.i
/opt/SUNWspro/WS6U2/bin/acomp -Qy -y-o -yex3-2.o -I/usr/ucbinclude -g "/opt/SUNW
spro/WS6U2/bin/acc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNW
spro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -I/usr/ucbinclude -c" -b -y-fbe -y/opt/
SUNWspro/WS6U2/bin/fbe -y-xarch=generic -y-xmemalign=4s -y-verbose -Xs -D__SunOS
_5_8 -D__SUNPRO_C=0x510 -Dunix -Dsun -Dsparc -D__unix -D__sun -D__sparc -D__BUIL
TIN_VA_ARG_INCR -D__SVR4 -y-s -I/opt/SUNWspro/WS6U2/include/cc -i /tmp/cpp.20856
.0.i
"ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません
rm /tmp/cpp.20856.0.i
### ucbcc: 注釈: LD_LIBRARY_PATH = /usr/ucblib:/usr/ccs/lib:/usr/lib
### ucbcc: 注釈: LD_RUN_PATH = /usr/ucblib
### ucbcc: 注釈: LD_OPTIONS = (null)
/usr/ccs/bin/ld -o keisan3-2 /opt/SUNWspro/WS6U2/lib/crti.o /opt/SUNWspro/WS6U2/
lib/crt1.o /opt/SUNWspro/WS6U2/lib/values-xs.o -Y P,/opt/SUNWspro/WS6U2/lib:/usr
/ccs/lib:/usr/lib -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/
WS6U2/bin:/usr/ccs/lib:/usr/lib ex3-2.o -lucb -lsocket -lnsl -lelf -laio -lc /op
t/SUNWspro/WS6U2/lib/crtn.o
ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
rm ex3-2.o
ret=0
+ exit 0
-------------------------------------------------------------------------

envの結果も書かせていただきます。

-------------------------------------------------------------------------
HOME=/disk2/user/md
PATH=/bin:/usr/bin:/usr/ucb:/etc:/opt/SUNWspro/bin:/opt/FSUNf90/bin:/disk2/user/
md/gnuplot:.
LOGNAME=
HZ=100
TERM=vt100
TZ=Japan
SHELL=/bin/csh
MAIL=/var/mail/md
LANG=ja
_INIT_NET_STRATEGY=none
_INIT_PREV_LEVEL=S
_INIT_RUN_LEVEL=3
_INIT_RUN_NPREV=0
_INIT_UTS_ISA=sparc
_INIT_UTS_MACHINE=sun4u
_INIT_UTS_NODENAME=
_INIT_UTS_PLATFORM=SUNW,Sun-Blade-1000
_INIT_UTS_RELEASE=5.8
_INIT_UTS_SYSNAME=SunOS
_INIT_UTS_VERSION=Generic_108528-27
PWD=/disk2/user/md
USER=md
LD_LIBRARY_PATH=/opt/FSUNf90/lib:/opt/SUNWspro/lib
MANPATH=/opt/FSUNf90/man:/opt/SUNWspro/man
-------------------------------------------------------------------------
という結果でした。


>>ucbcc: 警告: ld が起動される場合は、... 無視されます
>>ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
>これは警告なので、実行には支障がないはずです。keisan3-2 が
>生成されていませんか?
はい、ファイルはできています。実行すれば結果も出力されています。ただ、毎回この警告文がでていて、どれぐらい問題なのかどうかもわからないので、できるかぎり問題を取り除くことと、その理由が知りたいので…

>ファイル末尾に改行がないとその行を読んでくれないプログラムも
>あるので、改行をつける癖をつけておくことをお勧めします。
初めてしりました。ありがとうございます。気をつけます。

あと、もしお手数でなければ、今までされた質問の意図を教えていただければありがたいと思うのですが…手間がかかるようでしたら全然かまいませんので、よろしくお願いします。
それではまたよろしくお願いします。

No. 3811 # 68user 2004/06/19 (土) 22:05:38
>>3810 どら
結局、よくわかりませんでした。

Solaris の /usr/ucb/cc はシェルスクリプトで、/usr/ccs/bin/ucbcc
を起動しています。/usr/ccs/bin/ucbcc は /opt/SUNWspro/WS6U2/bin/acc
へのシンボリックリンクになっているはず。ですから、
        ucbcc: 警告:...
というのは acc が出力しているわけです。

コンパイラは
    http://x68000.startshop.co.jp/~68user/unix/pickup?gcc
にあるように、プリプロセス・コンパイル・アセンブル・リンクという
ステップを踏みます。提示していただいた例だと、最初に /usr/ccs/bin/ucbcc
(実体は /opt/SUNWspro/WS6U2/bin/acc) が実行され、それが
    /usr/ccs/lib/cpp (プリプロセッサ)
    /opt/SUNWspro/WS6U2/bin/acomp (コンパイラ)
    /usr/ccs/bin/ld (リンカ)
を順次起動しています。

# この場合、アセンブルはコンパイラの中で行われています。

で、
      ucbcc: 警告: ld が起動される場合は、オプション .. は ld に渡されます。...
というのは、最初に起動された ucbcc が -YP,.. というオプションを
理解できなかったため、
      「わたしの知らないオプションだけど、今から起動する ld ならこの
          オプションを理解できるかもしれないので、ld に -YP を渡します」
と言っているわけです。ただし、cc に -c オプションをつけたりすると
リンクは行われないため、そういうときに備えて
      「ld を実行しないようなオプションを指定された場合は ld が
          実行されないので、結果的に -YP オプションは無視されます」
とも言ってます。

で、
> ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。
についてですが、-YP オプションは ld に渡されます。実行結果を
見るとなぜか /usr/ccs/bin/ld に -YP が 2つ渡されてしまって
います。-YP オプションは、ライブラリを検索するディレクトリを
指定するものなので、ld は
      「ライブラリを検索するディレクトリが 2つ指定されているので、
          後の方を無視して、最初の方を使います」
と警告しています。

なぜ -YP オプションが複数渡されるのかを知りたいため、-v オプションを
つけてもらったり、env で環境変数を見せてもらったりしましたが、怪しげ
なものを見つけることはできませんでした。

> 特にldというものがいまいち理解できないのですが
ld はリンカです。例えば
>>3868 jeiu
で printf や scanf などの関数を使っていますが、これらの関数は
OS の機能として用意されているものではありませんし、コンパイラが
内蔵している機能でもありません。

/usr/lib/ の下に *.a や *.so などのファイルがあると思いますが、
ここにコンパイル済の printf や scanf が入っており、それと結合
しているわけです。それらのライブラリ関数と、あなたが作った
プログラムを結合するのがリンカの仕事で、コンパイル済の printf
や scanf はどのディレクトリに置いてあるかを指定するのが -YP
オプションです。

だらだらと書いてきましたが、ぶっちゃけて言うと一般的な解決方法は
      Solaris では /usr/ucb/cc を使わず、/opt/SUNWspro/bin/cc を
      使う。できれば PATH から /usr/ucb/cc を削除した方がよい
というもので、これはよく知られたノウハウです。/usr/ucb は
SunOS4 時代 (20年くらい前) との互換性のためのディレクトリで
あって、今どき積極的に使う必要性はありません。

ただ、わたしは根本的な原因を知りたかったので しつこく聞いて
みたのですが、実を結ばなかったようで誠に残念です。


以下は余談ですが、あなたの環境のコンパイラはおそらく Forte C update 2
という Sun の製品です。わたしの手元には Solaris2.6 + Sun Workshop
(Forte C の前バージョン。Sun の製品) がありますが、いくら頑張っても
同じエラーメッセージを出すことができませんでした。

よって、多分 Forte C の不具合ではないかと予想しています。

No. 3812 # zsh 2004/06/19 (土) 23:32:29
>>3811 68user
>>3810 どら
富士通のコンパイラも入っていそうだという事が気になるのですが・・・
/usr/ccs/bin/ucbcc は Forte へのシンボリックリンクになってますか?

No. 3813 # 68user 2004/06/20 (日) 00:12:16
>>3812 zsh
> 富士通のコンパイラも入っていそうだという事が気になるのですが・・・
/opt/FSUNf90/bin とかですか? Fortran のコンパイラと見たので
特に関係はないかと判断したのですが、どうなんでしょうね。

No. 3814 # どら 2004/06/20 (日) 21:09:26
>>3811 68user
お手数をおかけしてすいませんでした。
説明がわかりやすくてうれしかったです!!

PATHから/usr/ucb/ccを削除してみました。
そしたらいままでの警告文はなくなりました!!ありがとうございました。
しかし今までになかった警告文がでました。

-------------------------------------------------------------------
"ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
-------------------------------------------------------------------

というものでした。今まではこんな警告もなかったし、3行目の空白も見当たりません。
この前載せたプログラムと同じものなのですが、#includeと<stdio.h>の間の空白を消してみましたが同じでした。
またなにか問題なのでしょうか?他の例題に関してもまったくおんなじ警告文がでます…
この形の警告文はたいていプログラムの問題だったので、プログラムをいじれば解決していたのですが…

あと、もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが…
いろいろなホームページ上の例題をやってみたのですが、どれもうまくいかなくて…
(特に、Cのプログラムをgnuplotに出力させたいのですが、gnuplot本体を置くディレクトリの場所とか、リンクの仕方とか…)
もし時間があればでけっこうですので、少し教えていただけないでしょうか。よろしくお願いします。

No. 3815 # 68user 2004/06/21 (月) 11:07:58
>>3814 どら
> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
ソースを少しずつ削って、この警告が出る場所を特定してください。
問題の行を特定したけれども原因がわからない場合は、
      % od -cx < ex3-1.c (最小限まで削ったファイル)
として、変な文字が入っていないか確認してください。

> もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが…
質問がある場合は
    http://www.hyuki.com/writing/techask.html
を熟読した上でお願いします。ただしこの掲示板ではこれまで gnuplot の話題が
出たことはないので、
      Gnuplot Q&A 掲示板
          http://ayapin.film.s.dendai.ac.jp/cgi-bin/trees.cgi
などで聞いた方がよいかもしれません。適切な答えをもらうにはどこで
質問するのが効果的かを見極めた上でどうぞ。

それはそれとして
> Cのプログラムをgnuplotに出力させたいのですが
やればできるでしょうけど、gnuplot の使い方としては適切ではないような気がします。

No. 3816 # どら 2004/06/22 (火) 11:16:48
>>3815 68user

>> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります
>ソースを少しずつ削って、この警告が出る場所を特定してください。
includeの文を1行全部削ってみた所、正常に動きました。
しかし、includeの文はプログラムには絶対必要なものと思っていたのですが…
include文が無くても動くということはありえるのですか?
下に正常に動いたプログラムを書きます。
-----------------------------------------------------------------------
/* 【例題3.1】 rei3_1 */

main()
{
    int a,b;

    printf("異なる2つの整数を入力してください--->");
    scanf("%d %d",&a,&b);
    if(a > b)
    printf("%d --- BIG\n",a);
    
}
------------------------------------------------------------------------

No. 3817 # 68user 2004/06/22 (火) 12:16:39
>>3816 どら
> includeの文を1行全部削ってみた所、正常に動きました。
逆です。動くように削っていくのではなく、動かない最小限の部分を
突き止め、その原因を探る方法を教えたつもりです。

つまり #include に原因があることがはっきりしたので、
    % grep include ex3-1.c | od -cx
として、なぜ警告が出るのかを調べるべきです。

> include文が無くても動くということはありえるのですか?
いろいろありますが、初心者のうちは include 文は書くべきと
思っておく方がよいでしょう。

No. 3818 # どら 2004/06/22 (火) 15:36:28
>>3817 68user

この前のプログラムから、#includeと<stdio.h>の間の空白を削除してみましたが、やはり同じ警告が出ました。
それで、そのプログラムにgrepをかけてみました。どこに空白文字があるのかがわかりません…
あるとしても最後の“\d\n”ぐらいだと思うのですが、これは指令とは関係ないし、必要なもののはずなのですが…

下に“grep include ex3-1.c | od -cx”の結果を書きますので、終えてください。よろしくお願いします。
--------------------------------------------------------------------------
0000000 # i n c l u d e < s t d i o . h
                        2369 6e63 6c75 6465 3c73 7464 696f 2e68
0000020 > \r \n
                        3e0d 0a00
0000023
-------------------------------------------------------------------------

No. 3819 # 68user 2004/06/22 (火) 21:23:39
>>3818 どら
> 0000020 > \r \n
改行コードが CR LF になっています。UNIX の改行コードは LF です。
CR が空白文字扱いされているのでしょう。

とりあえず CR を削るだけなら tr コマンドが使えます。
    http://x68000.startshop.co.jp/~68user/unix/pickup?tr

Windows で作ったソースを ftp などで UNIX 上に持ってきて
いるなら、アスキーモードで転送しましょう。ただし、全て
UNIX 上で開発するのがスキルアップへの道だと思います。

No. 3820 # どら 2004/06/22 (火) 23:53:00
>>3819 68user

trコマンドで\r\nを\nに変えてみるとうまく作動しました。
ためしに、ftpでの転送もアスキーモードに変えると
うまく作動しました。
原因が改行コードとは…気づきませんでした。

いろいろとありがとうございました。

No. 3821 # マツマツ 2004/06/23 (水) 22:43:52
初めて掲載しますが....、
ソケット通信で、select()を使用した非同期通信をさせているのですが、
select()で検知した当該FDを(例としてFD=10と設定)recv()したら、
FD=10のrecv()返値が0(CLOSE?)となることがあります。
recv()返値が0の場合は、相手側がCLOSEしたものと認識はできるのですが、
疑問に思う動作でそれは、通常FD=10ならFD=10を介して送受信を行い、
select()監視しさせて、何かイヘ゛ント発生があればrecv()の動作に遷移する
動きを正常にしているのですが、突然的に(不規則と言うか、不確定と言うか)
FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
(ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
返値が0であると言う動作があります。
このような動作になる原因が解らず、何かヒントや調べる手立てとかありませんか???。
(これって、ネットワーク障害/ネットワーク負荷とか、相手側マシンのHW的障害
などの影響も考えられますか....???)
...記述表現が的確でありませんが、ご了承ください。

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

No. 3822 # ユウキ 2004/06/24 (木) 01:45:54
いまここのHTTPクライアントを参考にして
POSTをCGIへ仲介するCGIを作っているのですがうまくいきません;
GETのところを
print SOCKET "POST / HTTP/1.0\r\n";
print SOCKET "Content-Length: $size\r\n";
print SOCKET "\r\n";
print SOCKET "$buffer\r\n";
として
$buffer = $ENV{ 'QUERY_STRING' };
$size = length $buffer;
を追加してみたのですが・・・。お知恵を拝借できませんでしょうか?

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

No. 3823 # 68user 2004/06/24 (木) 02:14:44
>>3821 マツマツ
> FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
> (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
> 返値が0であると言う動作があります。
よく理解できませんが、
    1. send し、select で待つ。
    2. 相手側はデータを受信後、すぐに close しているはず。
    3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。
    4. recv すると 0 が返ってくる。
ということであれば、
    a. ネットワークの質が悪く、TCP の再送タイマが働いている
    b. 2 で相手が 24〜25 秒かけて何かを処理してから close している
くらいしか思いつきませんでした。パケットダンプしてみては。

>>3822 ユウキ
そんな複雑なプログラムを書くのはやめて、まずは単純に POST する
プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済
ということであれば、うまくいく場合とうまくいかない場合のリクエストを
見比べればわかるでしょう。


あと、質問をする前に
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んでください>質問者の方々

自分の使っている環境すら書かない人、回答してもわかったのかどうか返事さえ
書かない人が多くて、少々うんざりです。

No. 3824 # ユウキ 2004/06/24 (木) 04:44:17
申し訳ないです;少し安易に書き込んでしまいました。。。
単純にPOSTしてみます。深夜なのに申しわけなかったッス

No. 3825 # マツマツ 2004/06/24 (木) 15:55:40
●コメント/アドバイスの程ありがとうございます。
(個人的に多忙な面もあり、有意な内容が書かれていることに対して、
返事が遅れた点は、お許しください)

後追いの記載ですいませんが、使用しているマシンはSUNのSC2000
(OS:Solaris2.4)と、SVR4ベースOSを使ったマシン(ここでは相手側)
です。(LANのスペックは10BASE) <=両者とも今ではかなり古いものですが...。
またあえて言わしていただきますと、下記の3,4が発生するのは
SVR4ベースOSを使ったマシン側です。

> FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒
> (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら
> 返値が0であると言う動作があります。
よく理解できませんが、
        1. send し、select で待つ。
        2. 相手側はデータを受信後、すぐに close しているはず。
        3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。
        4. recv すると 0 が返ってくる。
ということであれば、
        a. ネットワークの質が悪く、TCP の再送タイマが働いている
        b. 2 で相手が 24〜25 秒かけて何かを処理してから close している
くらいしか思いつきませんでした。パケットダンプしてみては。

●まずは、LANアナライザーを噛まして見たいと思います。
    ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
    24〜25秒の値なのでしょうか。

>>3822 ユウキ
そんな複雑なプログラムを書くのはやめて、まずは単純に POST する
プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済
ということであれば、うまくいく場合とうまくいかない場合のリクエストを
見比べればわかるでしょう。
●そうですね。(基本的なことから行うべきですね)

No. 3826 # 68user 2004/06/24 (木) 21:05:18
>>3825 マツマツ
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
> 24〜25秒の値なのでしょうか。
「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、
再送間隔は
      1秒・3秒・6秒・12秒・24秒…
で、これを最初の送信からの経過時間で表すと
      1秒・4秒・10秒・22秒・46秒…
だそうです。

ただし RTT にそれなりの時間がかかる場合は、上記の通りには
なりません (計算式が難しくてよくわかりませんが)。

なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て
はまるかどうかはわかりません。

No. 3827 # マツマツ 2004/06/24 (木) 22:32:53
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは
> 24〜25秒の値なのでしょうか。
「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、
再送間隔は
            1秒・3秒・6秒・12秒・24秒…
で、これを最初の送信からの経過時間で表すと
            1秒・4秒・10秒・22秒・46秒…
だそうです。
●ありがとうございます。
(TCP/IPプロトコルについて、技術的な専門知識が分っていないため、
今後は勉強したいと思います。)
で、少々また不仕付けなお話ですみませんが、再送タイマが発生していると
した場合に、その原因/要因には、何があるでしょうか。
”ネットワークの質が悪く、TCP の再送タイマが働いている”
の部分で気になり、どちらかのマシンのHW不調(LANI/Fカードや
CPUボード等)とか、LANケーブル、HUB、トランシーバなどの
不調の影響で発生することとか考えられるでしょうか?。
(パケットトレースで確認することは必要なのですが、発生していると
分った時の発生原因を特定する上で、まず想定できる可能性のものがあれば
と思った次第からです)
(HW回りを疑って見るべきかどうか、何とも言えないのですが...)

ただし RTT にそれなりの時間がかかる場合は、上記の通りには
なりません (計算式が難しくてよくわかりませんが)。

なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て
はまるかどうかはわかりません。

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

No. 3828 # 68user 2004/06/26 (土) 00:30:41
>>3827 マツマツ
パケットを送信した後、一定時間が経過しても ACK が返ってこなければ
再送するわけなので、
> どちらかのマシンのHW不調(LAN・I/FカードやCPUボード等)とか、
> LANケーブル、HUB、トランシーバなどの不調の影響で発生することとか
> 考えられるでしょうか?。
これらすべてがパケット再送の原因となりえます。

No. 3829 # 68user 2004/06/26 (土) 00:43:43
この土日で当ページの引越しを予定しています。しばらく繋がらなかったり
するかもしれませんが、あらかじめご了承ください。

No. 3830 # 68user 2004/06/27 (日) 06:03:01
というわけで引っ越しました。

現時点でわかっている問題点は、
    - 掲示板の全文検索が動かない (準備中)
    - SEGA BBS 過去ログの全文検索が動かない (準備中)
です。この他に変なところがあればご指摘いただけると幸いです。

No. 3831 # 68user 2004/06/28 (月) 01:28:30
>>3830 68user
> - 掲示板の全文検索が動かない (準備中)
一応検索できるようになりました。

No. 3832 # 68user 2004/06/29 (火) 03:06:18
日記。

FreeBSD 5.2.1-RELEASE の /usr/bin/sort は NetBSD の sort から
GNU の textutils の sort に変わってしまったらしい。sort -c
で件数を数えることができなくなってしまった。ショック。

No. 3833 # 68user 2004/06/30 (水) 02:06:52
>>3832 68user
> sort -c で件数を数えることができなくなってしまった。
間抜けな勘違いをしていました。uniq -c と混同してただけでした。
sort も uniq もこれまで通り普通に使えますね。

No. 3834 # マオ猫 2004/06/30 (水) 23:03:44
最近になってTCP/IPの勉強を始めましたが、
    データリンク層
    トランスポート層
    ネットワーク層
の役割に反する実装の実例を挙げろって言われても……
何の事だかさっぱりです。
誰かわかるひといませんか?

No. 3835 # 68user 2004/06/30 (水) 23:19:43
>>3834 マオ猫
> …の役割
は何なのかをまず考えてみるべきでしょう。

ところで素朴な疑問ですが、これってどんな本 or 人 or 試験
からの出題ですか?

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