68user's page 掲示板

Prev< No. 1913〜2013> Next  [最新発言に戻る] [過去ログ一覧]
No. 1913 # HELP [E-mail] 2001/04/25 (水) 23:27:14
確かに宿題みたいなものなんですが、ほんとに全然さっぱりなんです。
fgetsとsscanfがどういうものなのかだけでも教えてもらえませんか?
参考書など読んだのですが、どのように使えばいいのかわからないんです。
問題のプログラムは一応できたんですが、あっているのかもわからないし、
自分で作ったプログラムなのに理解できないんです^^;
誰かお願いしますm(_ _)m

No. 1914 # 68user 2001/04/26 (木) 18:51:33
>>1913 HELP
では、自分の書いたプログラムを見せて、「こことここがわからん」
「ここは、こういう意味だろうか?」と質問してみてはどうでしょうか。

課題のプログラムについて、知るべきポイントや勉強すべきポイントは
たくさんあります。だから世の中にはたくさん C の参考書が出回って
いる。それら全てを回答者に解説させようとせず、自分がどこまで
理解しているかを明らかにした上で、ポイントをしぼって質問する
のが「うまい質問の仕方」というものです。

No. 1915 # HELP 2001/04/27 (金) 01:07:37
次の問題のプログラムを作ってみましたが、コンパイルできません。
どこが間違っているのか教えて下さい。

入力された数字を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 ;
    
}
    

No. 1916 # 68user 2001/04/27 (金) 03:38:19
>>1915 HELP
FreeBSD 4.2-RELEASE ではコンパイルできましたよ。コンパイル
できない場合は、どういうエラーメッセージが出たかを書きましょう。

ところで、条件では「文字列を返す関数」となっているので、
    char *sinnkeisann(int k)
とすべきですね。

ただし、インデントだけはきっちりつけましょう。そのソースを
見る他人のためでもあり、3日後にソースを見直すかもしれない
自分のためでもあります。

No. 1917 # すな 2001/04/27 (金) 05:25:31
元質問
>>1861 すな
>>1870 で hsjさんに教えてもらった件ですがやはりそのようですね。
http://homepage1.nifty.com/yito/namazu/gbook/20010423.0840.html
といった記事を見つけました。よって、
>>1864 でのレンタルホスト管理者からのメールで
>クライアントがURL欄に「http://www.intel.com/http://www.intel.com/
> と誤って記入すると、そのようなログが記録されます。
はやはり間違いですね。

参考までに…(参考にもならないかな?)
# しかし最近不正な(と思われる)アクセス増えたなぁ…

No. 1918 # 紅の猫 [E-mail] 2001/04/27 (金) 19:24:05
>>1915HELP
文法的には間違ってないし、アルゴリズムも基本的には正しいです。(だけどね(^_^)ニヤリ
あとはintの符号有り、符号無しの違いに注意したほうがいいです。

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

No. 1919 # HELP 2001/04/27 (金) 22:04:17
プログラムを以下の様に直してみました。しかしコンパイルができません。

#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

No. 1920 # 紅の猫 [E-mail] 2001/04/28 (土) 10:00:44
>>1919HELP

answerがint型なのにchar型を渡してるって事ですね。

答えの返し方は、関数を
void function(int n,char* s)
というように、返してほしい配列のポインタを引数にすればいいですよ。

No. 1921 # 68user 2001/04/28 (土) 17:35:14
>>1919 HELP
コンパイルは成功していますよ。Warning がどれだけ起ころうが、
Error が出ない限り実行ファイルが生成されているはずです。

ところで、戻り値の返し方について
>>1916 68user
> char *sinnkeisann(int k)
とすべき、と言いましたが、
>>1920 紅の猫
> void function(int n,char* s)
の方がよいですね。

No. 1922 # 68user 2001/04/28 (土) 22:22:49
毎回適当にいじって、毎回忘れてしまう 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'

No. 1923 # HELP 2001/04/30 (月) 01:00:54
新たにプログラムを作り直してみました。
コンパイルできますが、実行結果が全て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);

}

No. 1924 # 68user 2001/04/30 (月) 01:41:25
こういう形のやりとりはあまり効率的とは思えませんが、
納得できるまで付き合いますか。

>>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 に格納、
とするのがよいでしょう。

No. 1925 # HELP 2001/04/30 (月) 22:06:51
この問題はなんとか解決できました。
最後までつきあっていただいて本当にありがとうございました。
またよろしくおねがいします。

No. 1926 # ふくし 2001/05/02 (水) 12:07:45
しゅいましぇん Perl で質問です〜

らくだの本を読んでいて、

    *dick = *richard;

という代入を行なうと $richard も @richard も %richard も &richard も
エイリアシングされてしまうけど、

    *dick = \$richard;

だと $richard だけがエイリアシングされてしまう、というのがどうもよくわかりません。

あと、

    *PI = \3.14159265358979;

と書くと $PI は「定数スカラー」になっていじれなくなる、というのも、
これ、左辺はリテラルのリファレンスなんでしょうか??

No. 1927 # ミング [E-mail] 2001/05/02 (水) 13:43:23
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にしてし、全ての値をだしました。

まだよく理解できていないので、どうしてなのかがわかりません。ご指導
お願い致します。

No. 1928 # 68user 2001/05/04 (金) 00:11:00
>>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 し、それを読み出す、ということを
されたいのでしょうが、もっとよいアルゴリズムがあるんじゃないか
とは思います。他の方、わかりますか?

No. 1929 # 68user 2001/05/04 (金) 10:15:59
>>1447 nac
! で fold しているのは sendmail くんだそうで。
    http://script.lovely.to/bbs/infolng.cgi?print+200104/01040037.txt

No. 1930 # XRD [E-mail] 2001/05/07 (月) 13:33:13
はじめまして。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のファイルを開いて調べてみたのですが、それに関する情報がありませんでした。解釈がまちがっているのかもしれません。なにとぞ、ご指導おねがいします。

No. 1931 # 68user 2001/05/07 (月) 16:32:42
>>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
のところにあります。これをリンクするよう記述があったのでしょうが
見落としておられるのではないでしょうか。

No. 1932 # mm 2001/05/08 (火) 12:43:24
>>1927 ミングさん
>で全てを出す方法で目的は達成したのですが,それを一度で出したいと思い、下の様にしてみました。
実用的には、まずパイプで繋ぐことを検討すべきです。
1つのスクリプトにするにしても、元の2つがデータの行ごとの処理なので、
close や getline を使う必要がよく分かりません。

awkの勉強ということであれば、もっと単純な課題を使うべきでしょう。
スクリプトを拝見する限り、awkの文法を十分に理解されてるとは思えないもんで…

No. 1933 # _ 2001/05/08 (火) 15:56:47
>>1927 ミング
私の勘違いでなければ

#!/usr/bin/awk -f
{
        for (i = 0; i < 4; ++i)
                for (j = 0; j < 4; ++j)
                        print($1 "-" i + 1, j + 1, $2 + 100 * j, $3 + 100 * i)
}

で済む話だと思うんですが...
今の問題は、制御の流れを追って考えれば分かるのでは。

(1) 暗黙にstdinから1行入力
(2) 最初のアクションで、out1に4行出力
(3) 2番目のアクションで、out1から1行入力
        stdoutに4行出力後、(1)へ

(3)のgetlineで1行しか読んでいないので、(1)で
EOFが来る頃には、まだout1の1/4しか処理していない訳です。

No. 1934 # XRD [E-mail] 2001/05/09 (水) 12:12:14
68userさん、ありがとうございました。

まだ、うまくはできていませんが、がんばってみます。
splitword、cgiutils.cは見落としてました。
幸い本に掲載されていましたので、解決できそうです。
まだ、未熟者なので、わからないことが多々あると思います。
そのときは、お手数ですがよろしくお願いいたします。

No. 1935 # ED 2001/05/09 (水) 21:59:14
なるべく早くGOOやinfoseek
にかからないようにしてほしいのですけど…

特にSEGA BBSは…

No. 1936 # 68user 2001/05/09 (水) 22:11:38
>>1935 ED
> GOOやinfoseekにかからないようにしてほしいのですけど…
なぜですか? (何となく想像できますけど)
ちなみに、そうするかどうかは考えておきます。

> 特にSEGA BBSは…
SEGA BBS 以外でもロボットの検索対象から外したほうがよい
コンテンツがありますか?

No. 1937 # CZ 2001/05/10 (木) 10:07:02
とある(無料)サーバに ~hogehoge というファイルをFTP転送しました
が,これは作業中のバックアップ用ファイルを誤って転送したものです。

そこでWindows用FTPソフトを使って削除しようとすると,
    >DELE ~hogehoge
    550 ~hogehoge: No such file or directory
という結果になります。ちなみに相手方は ProFTPD です。

まあ当然といえば当然の結果かも知れませんが,いったいどうすれば削除で
きるでしょうか。コマンドを手動入力することは可能です。恐らくは ~ を
別の形式で表現すればいいのだと思いますが,どうも分からないのです。

ファイルが残っていても実害はないのですが,何となく気持ち悪いので,
よろしくご教示ください。

No. 1938 # ほいほい 2001/05/10 (木) 10:26:16
UNIX同士の通信で、TCP/IPのソケットを使ってHTTPのPOSTでデータのやり取りをしたいのですが、どのようにすればいいのでしょうか??
理解不足でもしかしたらわけわかんない質問をしているかもしれませんが、お願いします。
ソケットでのデータのやりとりだと思ってください。
また、TCP/IPプロコトルとHTTPは別もの??これもわけわかんないですか?

No. 1939 # hsj 2001/05/10 (木) 15:46:28
>>1937 CZ
そのファイルをフルパスで指定すれば消せませんか?
DELE /home/hoge/~hogehoge
みたいに。

>>1938 ほいほい
http://x68000.startshop.co.jp/~68user/net/
68userさんがせっかくこういう物を提供してくださってるんですから
読みましょうよ・・・。

No. 1940 # ほいほい 2001/05/10 (木) 16:02:47
>>1939 hsj
たすかりました。
なんかいろいろ見てて混乱してました。
いまみたら、理解しました。どうもすいません・・・・・

No. 1941 # 68user 2001/05/10 (木) 19:49:04
メールでいただいた質問ですが、勉強になったのでこちらでお返事。

> http://x68000.startshop.co.jp/~68user/net/perl4.html
> にも書かれていますが
> Perl4では SOCK_STREAM の値を直接指定しなければならない
> となっておりますが、Perl4の場合
> require 'sys/socket.ph';
> とするのでは無いでしょうか?
> (perl4環境が無く、人づてなので当てずっぽうです。)
なるほど、既に perl4 のラクダ本も手元になく、常用環境には
perl5 しかないので知りませんでした。あのページには perl4
なら sys/socket.ph を使うよう追記しておきます。

> また、サンプルの
> > socket(SOCKET,PF_INET,SOCK_STREAM,0);
> ですが、protocol だけが直接、値を指定しているのは
> 何故でしょうか?
TCP や UDP を使う場合は 0 でよいです。/etc/protocols には
    ip 0 IP # internet protocol, pseudo protocol number
    tcp 6 TCP # transmission control protocol
    udp 17 UDP # user datagram protocol
となっていますので、TCP を使う場合は
    socket(SOCKET, PF_INET, SOCK_STREAM, 6);
    socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
などと明示的に指定してもいいです (可読性と、NIS への対応
という面から見ると後者がよい)。

しかし、アドレスファミリ(PF_*) とソケットタイプ (SOCK_*) の
値が決まると、プロトコルは一意に定まります (なぜかはよく
わかりません)。なので、プロトコルに 0 を指定すれば、自動的に
適切なプロトコルが決定されます。

FreeBSD なら socket(2) の下請け関数である socreate で
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sys/kern/uipc_socket.c?rev=1.97
    int
    socreate(dom, aso, type, proto, p)
                if (proto)
                                prp = pffindproto(dom, proto, type);
                else
                                prp = pffindtype(dom, type);
と検索を行う関数 pffindtype が呼ばれています。

なお、ICMP をしゃべったり、IP データグラムを直接生成する
ために raw ソケットを生成したい場合は 非 0 を指定します。

No. 1942 # 68user 2001/05/10 (木) 20:08:11
>>1939 hsj
> そのファイルをフルパスで指定すれば消せませんか?
> DELE /home/hoge/~hogehoge
> みたいに。
FTP サーバの実装依存でしょうが、FreeBSD 4.3-RELEASE 付属の
ftpd だと、カレントディレクトリに ~hogehoge がある状態で
    > rm ~hogehoge
    DELE ~hogehoge
となり消せました。

ただ、
    > rm ./~hogehoge
    > rm /home/user/~hogehoge
は同じく 4.3-RELEASE 付属の ftp コマンドが何を勘違いしたのか
    RMD ./~hogehoge
    RMD /home/user/~hogehoge
とディレクトリを削除しようとして失敗していました。
    > quote DELE ./~hogehoge
    DELE ./~hogehoge
と、直接 FTP コマンドを送ると OK でした。

UNIX 界では、~hoge が「hoge ユーザのホームディレクトリ」と
解釈されるのは ~ が先頭にあるときのみですから、フルパスで
書いたり ./~hoge などとすればよいです。ただし、
    % perl Makefile.PL INSTALLMAN3DIR=~/install
のように、アプリケーション側 (この場合は ExtUtils::MakeMaker) で
展開してくれるものもあります。

No. 1943 # 68user 2001/05/10 (木) 20:13:49
>>1941 68user
> アドレスファミリ(PF_*)
プロトコルファミリでした。

ちなみに、うちの web ではアドレスファミリ (AF_*) と
プロトコルファミリ (PF_*) の使い分けがいいかげんだった
ような気がします。いまだに違いがよくわからんなぁ。

No. 1944 # ED 2001/05/10 (木) 21:26:36
68userさん>
SEGA BBS以外は問題ないです。
理由はまあ掲示板の中身です…

友人が私の名前を使って書いたものなのですが。

部分的に消去とかはできるのでしょうか?

No. 1945 # CZ 2001/05/11 (金) 00:15:55
>>1939 hsj
>>1942 68user

無事削除できました。回答してくださったお二方に感謝します。

そのサーバ(ProFTPD 1.2.0rc3)では
    >DELE /user/www/~hogehoge.html
    250 DELE command successful.
および
    >DELE ./~hogehoge.html
    250 DELE command successful.
のどちらでも成功しました。

で,実験していて気が付いたのですが,
    >STOR ~hogehoge
    550 ~hogehoge: No such file or directory
はダメで,
    >STOR ~hogehoge.html
    150 Opening ASCII mode data connection for ~hoge.hoge.
    226 Transfer complete.
のように拡張子が付くとOKというのは何だか不思議な仕様だと思いました。

No. 1946 # 68user 2001/05/12 (土) 02:27:40
>>1944 ED
> 友人が私の名前を使って書いたものなのですが。
> 部分的に消去とかはできるのでしょうか?
基本的には消したくありません。それをやり出すと、「恥ずかしいので
昔書いた私の発言を消して」というような要望にまで対応しなければ
いけないからです。

また、これはこっちの都合ですが、消去は手作業になります。URL を
入力してボタン一発で消去というわけにはいかないので、この作業に
時間を取られるようなら SEGA BBS 過去ログの公開は中止となります。

とは言っても、やはり見られては困る場合もあるでしょうし、こちらも
公開している以上はちゃんと管理する責任がありますので、「どうしても
困る」ということであれば消します。

あるいは、goo などのロボットよけを書いておけば OK ということで
あれば、そっちの方向で対処するかもしれません。

というわけで、質問です。
    Q1. できればやりたくないのですが、どうしても消さなければいけませんか?
    Q2. 発言を消さずに、ロボットよけを書くという対処でも OK ですか?

No. 1947 # ED 2001/05/12 (土) 21:31:35
68userさん>
個人的には消してほしいです。
その箇所は
http://x68000.startshop.co.jp/~68user/segabbs/bbs4/vol10/home.html
の53行目あたり
オススメの曲を教えて! - 朝生 浩 97/9/17 00:07:22
Re: オススメの曲を教えて! - ふらんこ 97/9/17 01:28:34
THANK YOU! - ヨ−タ 97/9/18 20:45:33
THANK YOU! - ヨ−タ 97/9/18 20:46:14
今は「硝子の少年」のよーだが - もひろ 97/9/18 21:19:01
結果は? - ヨ−タ 97/9/22 22:51:31
私のお薦めはコレです〜♪ - MINAMI 97/10/09 09:15:05

です。この部分を消してほしいです。

ロボット検索にひっかからないようにでもいいのですが
Web上に自分の名前があるのはどうも落ち着かなくて。

No. 1948 # kiyoto [E-mail] 2001/05/12 (土) 21:48:24
風光るの沖田さんとせいちゃんがすきなひといませんか?それと京都にあるという沖田さんの肖像画見た人だれかいませんか?私は、沖田さんの子孫をモデルにして書いたものなら見た事があるんですが・・・・・。

No. 1949 # 68user 2001/05/12 (土) 23:57:40
>>1947 ED
> ロボット検索にひっかからないようにでもいいのですが
ということであれば、ロボットよけを書くことで対処させて
いただきます。

No. 1950 # /tk 2001/05/14 (月) 03:04:39
>>1941 68user
メールで質問した者です。(名前違うけど・・・)
68userさん。ご回答ありがとうございます。

> perl4 なら sys/socket.ph を使うよう追記しておきます。
歌代さんの tcpconnect-1.0
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/tcpconnect-1.0
にて

    ;# require 'sys/socket.ph';
    unless (do 'sys/socket.ph') {
            #print "File sys/socket.ph is not found. Using default...\n";
            eval 'sub SOCK_STREAM {1;} sub AF_INET {2;} sub PF_INET {2;}';
    }

というコードを発見しました。
同じ「自分で直接 値を書く」でも、ここまですれば
許されそうな気がします(笑)

> TCP や UDP を使う場合は 0 でよいです。
> …
> プロトコルに 0 を指定すれば、自動的に
> 適切なプロトコルが決定されます。
> …
> なお、ICMP をしゃべったり、IP データグラムを直接生成する
> ために raw ソケットを生成したい場合は 非 0 を指定します。
なるほど、socket の説明の際によく書かれている
「普通は 0 でいいです」
的な言葉の意味が、ようやくわかりました。
# 危うく 0 を指定したいが為に getprotobyname('ip') とか
# 書くところだった… (本末転倒)

ところで、基本的な事がよく分かっていないので、勘違いの可能性大ですが
> socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
これだとリストで渡されませんか? > プロトコル

No. 1951 # 斎藤 2001/05/14 (月) 12:37:06
loggerコマンドで、-p"(priority)というのがあるのですが、
ここには、何を設定したらよいのですか。
”man logger”で見てもそれほど詳しくでできません。
設定する内容が詳しく書かれているものはないですか。

No. 1952 # 鈴木 2001/05/14 (月) 12:40:12
コマンドを使用して結果を出力せたた場合、1行ごとに改行と空白行
を含んで表示されます。
空白行を削除して詰めた結果を取得したいのですが、シェルスクリプト
でどう記述すればよいですか。

No. 1953 # 後藤 2001/05/14 (月) 13:27:38
こんちわっす!
APACHEに繋ぐにはどうしたらいいのでしょうか??
このホームページは一通りよんだのですが、頭が悪いせいかよく理解できませんでした。どうかお願いします。ちなみにUNIX on APACHEです。
ソケットで繋いだらいいのでしょうか??

No. 1954 # ED 2001/05/15 (火) 00:29:28
68userさん>
ロボットよけじゃなくて
やっぱ
その部分だけ消してもらえませんか?
よろしくお願いします

No. 1955 # にしだ 2001/05/15 (火) 03:21:38
かきこみ

No. 1956 # ひろ 2001/05/15 (火) 12:02:03
ちょっと趣旨が違うかもしれないのですが、同じパソコン上でCGIが動くかを試したいのですが(ソケット通信)どのようにすればいいかわかりません。
で、そのCGIが動くパソコンにはAPACHEが入っててそのAPACHEを通してデータのやり取りをしたいのですがいまいちよく分かりません・・・
どなたかURLだけでもいいのでお教えしていただけないでしょうか???

No. 1957 # はる 2001/05/15 (火) 17:19:18
困っています。"ln"コマンドでリンクを張ろうとし、誤ってしまいました。
>ls -la
lrwxrwrxrwx 1 haru 2 May 15 02:35 -s -> -s
となってしまいました。ファイルを消したくてrmを打ってみても
>rm -rf *s
usage: rm [-rif] file ...
と出てきて消せません。何方か消し方わかる方いらっしゃいますか?

No. 1958 # /tk 2001/05/15 (火) 21:22:00
>>1957 はる
> ファイルを消したくてrmを打ってみても
> >rm -rf *s
> usage: rm [-rif] file ...
> と出てきて消せません。
rm ./-s
で消せませんか?

No. 1959 # はる 2001/05/16 (水) 15:01:17
/tkさん
本当にありがとうございます。
消えました。

No. 1960 # 炭酸 2001/05/17 (木) 07:28:06
はじめまして炭酸といいます
HTTPプロトコルでファイルを転送するプログラムを作成しています
HTTP/1.1で部分的なPUTを行うためのヘッダの記述方法がわからないので
教えていただけないでしょうか?

あいうえおかきくけこ
↑このようなファイルを10バイトずつ2回に分けてPUTしたいのです

以下のようにやってみました

一回目
PUT /test.txt HTTP/1.1
Host:
Content-Length: 10
Content-Range: 0-9/20

あいうえお

二回目
PUT /test.txt HTTP/1.1
Host:
Content-Length: 10
Content-Range: 10-19/20

かきくけこ

これではうまくいかないようです
ほかに必要なヘッダなどありましたらお教えいただけませんでしょうか
長々と失礼いたしました

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

No. 1961 # mm 2001/05/17 (木) 11:41:00
>>1956 ひろさん
WinでApacheなら、<http://tohoho.wakusei.ne.jp/wwwxx048.htm>
ソケット通信は、localhostか直結してるなら自身のIPアドレスで
普通にアクセスすればいいです。

>rm ./-s
unixは使ったことないけど、
rm -- -s
でもいいのかな?

No. 1962 # /tk 2001/05/17 (木) 14:58:41
>>1961 mm
> unixは使ったことないけど、
> rm -- -s
> でもいいのかな?
rm なら良いみたいです。
http://pipi.iis.u-tokyo.ac.jp/~miyoshi/QandA/unix/file/15.html

ちょこっとテストした結果では
touch, cp, mv にも「--」オプションは有効でした。

# 調べものすると、自分の為になるなぁ…

No. 1963 # mm 2001/05/17 (木) 21:49:19
>>1962 /tk さん
>touch, cp, mv にも「--」オプションは有効でした。
getopt.cを使う古くからのコマンドや上位互換のライブラリを
使うものなら、たぶん有効だと思ってました。
けど、リンク先を見ると、./-s の方も覚えておいた方がいいようですね。
ありがとうございます。

No. 1964 # 68user 2001/05/18 (金) 01:57:48
>>1950 /tk
>> socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
> これだとリストで渡されませんか? > プロトコル
スカラーコンテキストなので、スカラー値が返ります。
    socket(SOCKET, PF_INET, SOCK_STREAM, @a=getprotobyname('tcp')) || warn "$!";
    print "@a\n";

    socket(SOCKET, PF_INET, SOCK_STREAM, $a=getprotobyname('tcp')) || warn "$!";
    print "$a\n";
を試してみるとわかると思います。

>>1951 斎藤
syslog.conf(5) に解説がありませんか?

>>1952 鈴木
状況がよくわかりません。command | grep -v '^$' とか?

ところで、
>>1951 斎藤
>>1952 鈴木
REMOTE_HOST が同じですが、同じ方ですか?

>>1953 後藤
どういう意味で「apache に繋ぐ」と言っているのかよくわかりません。
「〜はわかったが、〜の部分がわからない」という質問の仕方をして下さい。

>>1956 ひろ
http://X68000.startshop.co.jp/~68user/net/ を読んで、
「〜はわかったが、〜の部分がわからない」という質問の仕方をして下さい。

ところで、
>>1953 後藤
>>1956 ひろ
REMOTE_HOST が似ていますが、同じ方ですか?

>>1954 ED
わかりました。しかし、時間が取れないのですぐに作業することは
できません。ご了承下さい。

>>1960 炭酸
ちょっと時間が取れないので、土日にでも調べてみます。
> これではうまくいかないようです。
どううまくいかないのか、エラーメッセージは出るのか、
PUT 一つだとどうなるか、などを書くと回答をもらいやすい
かもしれません。

No. 1965 # 御影教授 [URL] [E-mail] 2001/05/18 (金) 10:37:57
はじめまして。PERL版HTTPクライアントのページが、大変役に立ちました。ありがとうございます。
最近、会社のフィルタリング(^^;が厳しくなっきた為、ちょうど、作っていたところでした。STDOUTへ
バーナーを挿入する無料サーバー(*1)を経由して、画像ファイル(*2)をGETする場合、一旦、
*2を*1へ保存してから、*2の埋め込みページを出力する、以外の面白いアイデアがあれは、お
聞かせ下さい。
#ウェブメールクライアントも作らないと(^^;

No. 1966 # 炭酸 2001/05/18 (金) 18:30:11
レスありがとうございます>68userさん
言葉が足りませんでした補足させてください
RFC2616 の14.16あたりを読んでやってみています

■リクエスト
1回目
PUT /test.txt HTTP/1.1
Host:
Content-Length: 10
Content-Range: bytes 0-9/20

あいうえお

2回目
PUT /test.txt HTTP/1.1
Host:
Content-Length: 10
Content-Range: bytes 10-19/20

かきくけこ

■結果
レスポンスヘッダには Content-Range ヘッダがありません
リクエストに Content-Range ヘッダがないときと同じように
動作しているようです
サーバにはかきくけこというデータが上がった状態になります
(2回目のリクエストで上書きされているようです)

サーバーのバージョンは
Apache/1.3.12(Unix) (Red Hat/Linux) tomcat/1.0 DAV/1.0.0 mod_perl/1.21
ですひょっとしてサーバーがレンジに対応していないのでしょうか?
ネットワークプログラムの初心者なのでリクエストに問題があるのかと不安に
思い質問させていただきました

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

No. 1967 # /tk 2001/05/18 (金) 22:10:11
>>1964 68user
> スカラーコンテキストなので、スカラー値が返ります。
うう。やはり基本的な事がわかってなかった。

何でスカラーコンテキストになるのかが
理解出来てなかったです。

今回の件で青ラクダ本のコンテキストの項や
サブルーチン(プロトタイプ)の項を読んで
自作の関数に getprotobyname() 渡して
その中で print したりして
何となく理解出来たつもりになりました。
# 今まで引数の型の宣言なんて知らなかった。

68userさん。ご回答ありがとうございました。


で、お礼の後の質問で恐縮なんですけど
自分なりに分かったつもりなった結果
> socket(SOCKET, PF_INET, SOCK_STREAM, @a=getprotobyname('tcp')) || warn "$!";
これの警告が出る理由は getprotobyname('tcp') の
リストの要素数が 3つだからだとと思うのですが
実のところどうなんでしょう?
# またもや間違っている可能性大

No. 1968 # ED 2001/05/18 (金) 23:30:08
>68userさん
ありがとうございます。
助かります。

No. 1969 # The WAY [URL] 2001/05/19 (土) 00:16:33
>>1966 炭酸
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6 によると
>If the Request-URI refers to an already existing resource, the enclosed entity SHOULD be considered as a modified version of the one residing on the origin server.
とあるので、
>サーバには「かきくけこ」というデータが上がった状態になります。
>(2回目のリクエストで上書きされているようです。)
というのは仕様上正しい動作だと思います。

>>1960 炭酸
を読むと、おそらく「レジュームの逆」を行いたいのだと思うのですが、それは PUT ではできないと思います。
# FTP の PUT でもできないですよね?

No. 1970 # 68user 2001/05/19 (土) 00:22:47
>>1967 /tk
> これの警告が出る理由は getprotobyname('tcp') の
> リストの要素数が 3つだからだとと思うのですが
そうですね。
    socket(SOCKET, PF_INET, SOCK_STREAM, @a=getprotobyname('tcp'))

    Protocol not supported at -e line 1.
となりますが、これは ('tcp','TCP',6) というスカラーが返って、
先頭の 'tcp' の値が使われるのでエラーになると思っていましたが、
勘違いでした。

('tcp','TCP',6) というリストをスカラーコンテキストで評価
したため 3 が返り、
    socket(SOCKET, PF_INET, SOCK_STREAM, 3)
と等価になってしまったということですね。

>>1966 炭酸
すいません。今 apache で PUT メソッドを有効にするには
どうすればいいんだっけ? と調べているところです。

# apache 単体では無理で、mod_put か DAV あたりを入れないと
# ダメみたいですね。

また PUT や Content-Range は実際に使ったことがないので、
あまり期待しないで下さい。

No. 1971 # 68user 2001/05/19 (土) 00:43:43
>>1969 The WAY
> http://way.direct.ne.jp/HTTP/
RFC2616 は流し読んだ程度なので、僕も勉強しないと。というわけで、
    http://X68000.startshop.co.jp/~68user/net/rfc.html
からリンクを張らせていただきました。

# http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/rfc.html

No. 1972 # moto [E-mail] 2001/05/19 (土) 01:07:49
大変勉強になり感謝しています。(本当だよ)

パールの関数で 
$port = getservbyname('http','tcp'); の出力がなくて
悩んでいたのですが、今日その理由がわかりました。
プロバイダーの /etc/services に http tcp/80 のエントリが
無いのです。(-_-;)
試しに自分のPCの C:\windows\services  を覗いたら
ここにもエントリがありません。
他のウェルノゥンポートはエントリがあるのに
何故 HTTP のみがエントリされてないのでしょうか。
セキュリティーの関係なのでしょうか。

No. 1973 # 68user 2001/05/19 (土) 18:47:52
>>1972 moto
> プロバイダーの /etc/services に http tcp/80 のエントリが
> 無いのです。(-_-;)
例えば Solaris2.6 などは http tcp/80 がありませんね。

> 試しに自分のPCの C:\windows\services を覗いたら
> ここにもエントリがありません。
生まれて初めて C:\windows\services を見ましたが、http の
エントリってないのですね (Windows Me)。

Solaris は最小限のエントリのみ書いておくから、必要なら勝手に
追加してね、という思想じゃないかと想像します。Windows Me は
なぜでしょうね? わかりません。

なお、UNIX では NIS というシステム情報を共有する仕組みがあります。
もしそれを使っているなら
    % ypcat services
とすれば出てくる場合もあるでしょう。NIS 使用時には getservbyname は
/etc/services を見ません。

No. 1974 # 炭酸 2001/05/21 (月) 00:19:53
どうもありがとうございます。>68userさん The Wayさん

サーバーにはDAVが入ってるので、普通のPUTはできます。
もういちどRFCをよく見直してみます。
ほんとにありがとうございました。

No. 1975 # ENO [URL] 2001/05/21 (月) 20:42:57
はじめまして、ENOと申します。

質問その1:

FreeBSD4.2で、ENIのatmアダプタを認識させ、
en0というインタフェースが出来たのですが、
これをmulticastに対応させたいのですが、
en0=841<UP,RUNNING,SIMPLEX>mtu 9180
となっていて、対応してくれません、
ここに<....,MULTICAST>となるようにするに
は、どうしたらよいのでしょうか・・・どな
たか教えてください

その2:
その1のマシンで、mroutedを動かして、マル
チキャストルータとしたいのですが、webのあ
ちこちにある資料にあるように、デフォルトで
mrouted_enable="YES"としても、動いてくれま
せん。mroutedを動く状態にするまでにどうした
らよいのか教えてください

宜しくお願いいたします

No. 1976 # isaq [E-mail] 2001/05/21 (月) 20:44:46
はじめて質問させていただきます。
本ページで色々勉強させて頂いてます(感謝)

当方のレベル)初心者
winsockを用いたマルチスレッドクラサバ作成調査中
クライアント・サーバ間の通信確立方法の基本は理解(してるつもり)

内容)
クライアントからの接続要求が複数同時に(理論的に全く同時はありえないかもしれませんが)サーバにきた場合、サーバ側のリクエスト待ちプロセス内のlisten関数は、どのようにこの要求を処理するのでしょうか?つまり、全く同時のアクセスに対して、listen関数が作る待ち行列(キュー)にはどう格納されるのでしょうか?
要求受付後は、各クライアント毎に処理を並行に行う(マルチスレッド)
ことができますが、要求受付部のlisten関数はマルチ対応なのかどうか
、前出の全く同時の接続要求はどう処理されるのかが分からないので、ご存知の方が、是非ご教授いただければありがたいです。
質問内容が初歩的かもしれませんが、よろしくお願いしますm(__)m

No. 1977 # 68user 2001/05/22 (火) 15:14:41
>>1975 ENO
マルチポストは禁止です。
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

>>1976 isaq
要は、listen が thread safe かどうか、ということでしょうか?

複数のスレッドが同時にクライアントとの接続を取り合ったりしないのか? と
いう意味かと思いますが、listen は OS へ「クライアントからの接続を受け
付けなさいと」命令するだけです。それに対して、accept は OS がキュー
イングしておいた待ち行列から、先頭のクライアントを取り出す命令。

というわけで、listen や accpet のマニュアルを見て、thread safe か
どうかを確かめましょう。

FreeBSD ならばマニュアルに
      http://www.jp.FreeBSD.org/cgi/mroff.cgi?subdir=man&man=listen&dir=jpman-4.3.0%2Fman

      非スレッドライブラリ listen() は listen システムコールとして実装されています。

      スレッドライブラリでは、 listen システムコールは _thread_sys_listen() に
      アセンブルされ、 listen() は読み書きについて s をロックしてから、
      _thread_sys_listen() を呼び出す関数として実装されています。戻る前に
      listen() は s をアンロックします。
とあります。Windows は知りませんが、マニュアルに書いてあるのでは
ないでしょうか。

あるいは、「スレッド」という用語を、pthread などの thread でなく、
単に「並行動作」という意味で使ってますか?

No. 1978 # skel.103M [E-mail] 2001/05/22 (火) 23:34:53
skel.103Mです。いつもお世話になっております。

さて、
http://X68000.startshop.co.jp/~68user/Cgi-room/
の「MXレコードのお話」についてですが、質問させていただきたい
ことがあります。

メールアドレスは、「{ユーザー名}@{ホスト名}」という構成をし
ていますが、この{ホスト名}の部分に記述されたホストが実際に存
在する場合、即座に(MXレコードを参照せずに)そのホストに送ら
れるのでしょうか。それとも、{ホスト名}に記述されたホストが実
際に存在したとしても、存在しないホストと同様に、まずMXレコー
ドを参照し、その結果現れたホストに送られるのでしょうか。

先述したページを読むと、{ホスト名}の部分が存在しない場合に*のみ*、
MXレコードを参照し、その結果現れたホストに送られるものである、
と書いてあるように思えました。実際、これは(少なくとも私にとっ
ては)直感に反しないことで、そうなのかなと納得してました。と
ころが、某メーリングリスト宛てのメールが私に届きまして、ヘッ
ダを見ると、To: の欄のメールアドレスのホスト名の部分(@より右側)が
実際に存在するホスト名であるにもかかわらず、Received: にその
ホスト名が載ってない?!…ということがありましたので。

No. 1979 # isaq 2001/05/23 (水) 11:45:13
68user殿

ご指摘の通り、listenがthread safeかどうかが知りたかったわけです。
教えていただいたURL参考にさせていただき、もう一度調べ直してみて、分からなければ質問させていただきます。
また分かりましたら、報告させていただきます。
分かりにくい質問を投げてしまったけれど、お返事ありがとうございました。

ちなみに、OS:Windows 2000 でクラサバ開発しているのですが、私が使っているwinsock関連書籍で
”WinSock2.0プログラミング 発行:ソフトバンクパブリッシング”
というのがあリます。もしwinsockを初めて使おうとしている方がいましたら一読すると良いかもしれません。

No. 1980 # 68user 2001/05/23 (水) 12:15:58
>>1978 skel.103M
> この{ホスト名}の部分に記述されたホストが実際に存在する場合、
> 即座に(MXレコードを参照せずに)そのホストに送られるのでしょうか。
    1. IP アドレス直接指定なら、直接 IP アドレス宛に送信 (Ex. To: foo@<127.0.0.1>)
    2. 1 がダメで、MX が引けたなら、優先順位を考慮して MX 宛に送信
    3. 2 がダメで、A レコードが引けたなら (=正引きできた)、A レコード宛に送信
という順序だと思います。なので、MX が優先ですね。

多分、ここらへんは RFC 2821 に書いてあると思います。
# http://ring.riken.go.jp/pub/doc/RFC/rfc2821.txt

No. 1981 # skel.103M [E-mail] 2001/05/23 (水) 16:12:26
どうも、skel.103Mです。ご返答どうもです。

メールアドレスと送信先ホストの件、了解しました。私なりに調べた
ところ、RFC2821の「5. Address Resolution and Mail Handling」で、
> are generally discouraged. The lookup first attempts to locate an MX
> record associated with the name. If a CNAME record is found instead,
> the resulting name is processed as if it were the initial name. If
> no MX records are found, but an A RR is found, the A RR is treated as
> if it was associated with an implicit MX RR, with a preference of 0,
> pointing to that host. If one or more MX RRs are found for a given
> name, SMTP systems MUST NOT utilize any A RRs associated with that
> name unless they are located using the MX RRs; the "implicit MX" rule
> above applies only if there are no MX records present. If MX records
> are present, but none of them are usable, this situation MUST be
> reported as an error.
とありますね。なるほど。ちなみに、RFC974にも似たような記述があり
ましたね(現在はHISTORICですけど)

ただ、分からないのは、なぜこのように定められているのか、その理
由が私にはよく分かりません。。私には直感に反するように思うんで
すが……

No. 1982 # 匿名 2001/05/24 (木) 19:34:23
「ソースを表示してみよう」で、
http://www.chailien.com/
が、正常表示されません。

No. 1983 # 68user 2001/05/24 (木) 20:14:24
>>1981 skel.103M
たとえば UNIX マシンが数百台あるような環境があるとして、
    % hostname
    host123.example.ac.jp
    % whoami
    user
のとき
    % echo | mail foo@bar
などとすると、
    From: user@host123.example.ac.jp
なメールが foo@bar 宛に届きます。

このままリプライをすると host123.example.ac.jp 宛に
メールが送られますが、数百台全てのマシンに SMTP
サーバを立ち上げておくのは現実的ではありません。

で、それらの MX を mail.example.ac.jp に指定しておけば、
    From: user@host123.example.ac.jp
であっても MX 宛に届きます。もちろんその際には MX レコードが
A レコードより優先されなければいけません。

…という感じで僕は理解しておりますが、いかがでしょうか。

>>1982 匿名
どうもです。直しました。

No. 1984 # skel.103M [E-mail] 2001/05/24 (木) 21:45:19
skel.103Mです。68user様、ご返答どうもです。

>>1983 68user
なるほど!よく分かりました。

そこで、実際にそうなっていることを確かめるために、某ネットの
(すなわち大学以外の)マシンを使って以下の要領で実験を行って
みました。

・送信元ホスト:test.bounet.net
・宛先メールアドレス:s1080224@exist.u-aizu.ac.jp
        正式なメールアドレスではなく、@の右側を実際に存在するホスト
        名に改竄。

結果は以下のようになりました:
----------
1. まずMXレコードを調べておく。
        →@exist.u-aizu.ac.jpのアドレスに対応するMXレコードは
            mailhost.u-aizu.ac.jpである。
[bounet] % nslookup
Default Server: localhost
Address: 127.0.0.1

> set q=mx
> exist.u-aizu.ac.jp.
Server: localhost
Address: 127.0.0.1

Non-authoritative answer:
exist.u-aizu.ac.jp preference = 10, mail exchanger = mailhost.u-aizu.ac.jp

Authoritative answers can be found from:
…(省略)…
[bounet] %

2. メールを送信。
[bounet] % telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.bounet.net.
Escape character is '^]'.
220 test.bounet.net ESMTP Sendmail 8.11.3/***************; Thu, 24 May 2001 20:47:40 +0900 (JST)
EHLO localhost
250-test.bounet.net Hello localhost.bounet.net [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
MAIL FROM: testerz@bounet.net
250 2.1.0 testerz@bounet.net... Sender ok
RCPT TO: s1080224@exist.u-aizu.ac.jp
250 2.1.5 s1080224@exist.u-aizu.ac.jp... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: test
X-Mailer: telnet JiKaUcHi (^^;;;

This is a test mail.
.
250 2.0.0 f4OBm4K02587 Message accepted for delivery
quit
221 2.0.0 test.bounet.net closing connection
Connection closed by foreign host.
[bounet] %

3. 送信ログを確認する。
        →配送先はexist.u-aizu.ac.jpでは*なく*、MXレコードとして指定され
            ているホストmailhost.u-aizu.ac.jpに配送された。
May 24 20:50:34 test sendmail[2587]: f4OBm4K02587: from=testerz@bounet.net, size=**, class=0, nrcpts=1, msgid=<200105241149.f4OBm4K02587@test.bounet.net>, proto=ESMTP, daemon=Daemon0, relay=localhost.bounet.net [127.0.0.1]
May 24 20:50:41 test sendmail[2596]: f4OBm4K02587: to=s1080224@exist.u-aizu.ac.jp, ctladdr=testerz@bounet.net (****/****), delay=00:01:22, xdelay=00:00:07, mailer=esmtp, pri=30069, relay=mailhost.u-aizu.ac.jp. [163.143.1.43], dsn=2.0.0, stat=Sent (UAA23329 Message accepted for delivery)
----------

たしかに、MXレコードがAレコードより優先されていますね。

どうもありがとうございました。
これからもよろしくお願いします!

No. 1985 # へにか [URL] 2001/05/26 (土) 01:10:55
お久しぶりです。

ちょっと思うところがあって、掲示板の検索をしたのですが、ふと疑問が出てきました。

http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard/namazu.cgi?query=http&whence=0&max=20&result=normal&sort=score
とかしますと、>とか<とか"とかが、&gt;とか&lt;とか&quote;と表示
されるみたいです。これは、仕様ですか?

あと、同じページの最後に、webmaster@www2.startshop.co.jp と
ありますが、このwww2は、http://x68000.startshop.co.jp/~68user/
から推測するに、間違いなのではないですか? 違ったら済みません。

No. 1986 # 2001/05/26 (土) 15:34:16
初めて書き込みさせていただきます。

和文で,改行を空白に置換する方法を
ご存知の方はいないでしょうか。

例)
おはよう
こんにちは
こんばんは

おはよう こんにちは こんばんは


目的は,ウェブページのフォームから送られた文章を,
表示するページの都合で,改行無しの文に変更することです。

よろしくお願いいたします。

No. 1987 # 通りすがり 2001/05/27 (日) 11:51:35
>>1986
HTMLならば加工するまでも無く改行が無視されますが?

No. 1988 # 68user 2001/05/27 (日) 19:51:08
>>1985 へにか
> &gt;とか&lt;とか&quote;と表示されるみたいです。これは、仕様ですか?
いえ、正しくは < > " と表示されるべきです。この掲示板の
データ用の文書フィルタ
    http://www.namazu.org/doc/manual.html#doc-filter
を作成したのですが、それが不十分な状態です。

> あと、同じページの最後に、webmaster@www2.startshop.co.jp と
> ありますが
こちらも正しくは 68user@X68000.startshop.co.jp です。これは…
どこで設定するんだっけ。なんかコンパイル時に埋め込まれるような
気がしないでもないなぁ。

両方とも調べて直しておきます。ご指摘ありがとうございました。

>>1986
> 目的は,ウェブページのフォームから送られた文章を,
> 表示するページの都合で,改行無しの文に変更することです。
ちゃんと使っている環境を書きましょう。perl なら
    $str =~ s/\r\n|\n/ /g (半角空白に置換したい場合)
    $str =~ s/\r\n|\n/ /g (全角空白に置換したい場合)
でしょうか。

No. 1989 # gooo 2001/05/30 (水) 10:30:04
初めて書き込みします。

UNIXのシステム音のビープ音の音量を大きくしたいのですが、どうすれば
いいのでしょう。CDEデスクトップツールでビープ音の調整というのがあっ
たのですが、その最大値よりもさらに大きくしたいと思ってます。

このビープ音は内部スピーカーから鳴っている様で、もし音量を調整でき
ないのであれば内部スピーカーを外部スピーカーに切り替える方法を知り
たいのですが、誰か分かる人いませんか。

どうぞよろしくお願いします。

No. 1990 # ふくし 2001/05/30 (水) 15:52:58
いつも困ったときばかり相談ですみません。

#! perl

...

for (sort {&year($b) <=> &year($a)} glob './bank*.txt') {
        my $foooo = &year($_);
        warn ":::: [$idat2] vs [$foooo]";
        if ($idat >= $foooo) {
                warn "!!!!:::: [$idat2] >= [$foooo]";
                open BANK, $_ or die "can't open $_ because $!";
                last;
        }
}

という文が CGI の中にあって、
エラーログに

:::: [20010730] vs [20010701] at /html/cgi-bin/foo.cgi line 319.
:::: [20010730] vs [20010601] at /html/cgi-bin/foo.cgi line 319.
:::: [20010730] vs [00000000] at /html/cgi-bin/foo.cgi line 319.
!!!!:::: [20010730] >= [00000000] at /html/cgi-bin/foo.cgi line 321.

と出ます。

20010730 対 20010701 の時点で 20010730 が勝つと思うのに納得いきません。
助けてください〜

No. 1991 # ふくし 2001/05/30 (水) 16:10:46
試みに s/>=/ge/ してみたら(ゼロづめなので文字として比較しても同じかと思って)、

:::: [20010530] vs [20010701] at /html/cgi-bin/foo.cgi line 319.
!!!!:::: [20010530] ge [20010701] at /html/cgi-bin/foo.cgi line 321.

だそうです。(T.T)

No. 1992 # ふくし 2001/05/30 (水) 17:42:11
すっすいませんでした。
過去の2発言、忘れてください。
(文字面で、もういきなりバグってます)

No. 1993 # 2001/05/30 (水) 22:45:51
>>1987 通りすがり
> HTMLならば加工するまでも無く改行が無視されますが?
すみません。意味がわかりませんでした。

>>1988 68user
> ちゃんと使っている環境を書きましょう。
すみません,忘れていました。
使い方も読んでいなくて,申し訳ありませんでした。今後は気を付けます。
ご推察の通り,環境はperlです。
$str =~ s/\\n/ /g
なんて自分で書いて試してみたらできなかったので
書き込ませていただいたのです。
今回,
$str =~ s/\r\n|\n/ /g
で,試してみたのですが,上手くいきませんでした。
でも,基本的に考え方は間違っていなかったようだと
わかったので助かりました。
もしかしたら,プログラムの他の部分に問題があるのかもしれません。
チェックし直してから,報告させていただきます。

No. 1994 # PC歴5ヶ月 2001/05/31 (木) 15:27:32
このページは、めちゃくちゃためになりますね。
今後も参考になることをやってくれるとありがたいっす。

No. 1995 # といも 2001/06/04 (月) 11:58:38
このページのおかげで,ネットワーク全体が見えてきました.
本当にありがとうございます.
これからも参考にさせていただきたいので,
このHPがずっとなくならないことを心よりお願いいたします.
これからも頑張ってください.

No. 1996 # 68user 2001/06/05 (火) 22:25:03
どうも忙しくて回答さえ満足にできませんな。いかんことです。

>>1989 gooo
> もし音量を調整できないのであれば内部スピーカーを外部スピーカーに
> 切り替える方法を知りたいのですが、
最大限に上げたのならもう音量は調節できないでしょう。
後はハード工作になるんですかね。その方面は全くわからないので、
すいませんがわかりません。

>>1990 ふくし
>>1991 ふくし
>>1992 ふくし
えっと、解決したんですよね?

>>1994 PC歴5ヶ月
>>1995 といも
どもども。とはいえ時間がなくて更新も満足にできないのですが。

No. 1997 # ED 2001/06/06 (水) 00:44:07
>68userさん
Sega BBSの件なんですけど、
消去が時間かかりそうだったら、
とりあえずロボット検索に
引っかからないように、しといてほしいのですが…
早めにお願いします。
http://www.google.com/intl/ja/faq.html
お忙しいところすいません。
よろしくお願いします。

No. 1998 # 田中 2001/06/06 (水) 00:51:35
初めまして。質問です。

ホームページ本体を置くサーバー(A)とCGIサーバー(B)が別になっていて、
サーバーAにあるHTMLファイルからサーバーBにあるCGIを呼び出し、
サーバーAにある別のファイルの情報を取得するため、以下のように記述しました。

open FH ,"http://www.abc.co.jp/xyz/index.html" or die "open失敗:$!";

しかし、うまくファイルをオープンすることができませんでした。
パスを相対的に指定すれば成功するのですが、絶対的に指定すると、
CGIサーバー内であってもオープンできません。
これはこういう仕様なのでしょうか。
そうだとすれば、他にいい方法はあるのでしょうか。(被参照ファイルをサーバーBに置く以外で)
ご回答をよろしくお願いいたします。

No. 1999 # 68user 2001/06/06 (水) 01:44:16
>>1997 ED
ロボットよけ META タグを追加しました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/view-segabbs.cgi.diff?r1=1.3&r2=1.1&f=h
時間が取れたらコンテンツ自体を削除します。

>>1998 田中
> open FH ,"http://www.abc.co.jp/xyz/index.html" or die "open失敗:$!";
open というのはファイルをオープンするもので、ファイルいうのは
マシンに接続されている HDD や CD-ROM に格納されているものを
指します。
# っていうととても語弊がありますけど。将来的にはそういう指定の
# 仕方ができるようになるんじゃないかと思います。

なので、それをしたければサーバ B で動かすプログラムから
サーバ A の web サーバにアクセスして
    http://www.abc.co.jp/xyz/index.html
を取得しなければいけません。仕組みについてはここらへんを。
    http://X68000.startshop.co.jp/~68user/net/

実際は wget, fetch などのコマンドや、(perl なら) LWP,
IO::Socket などのモジュールを使ってサーバ A から /xyz/index.html を
取得するのがお手軽です。

No. 2000 # 田中 2001/06/06 (水) 07:39:41
68userさん、素早い回答をありがとうございました。
教えて頂いたやり方は、私にはまだ高度すぎるようです。
もう少し勉強してみます。

No. 2001 # 初男 2001/06/07 (木) 10:32:32
はじめまして。初男と申します。

質問があります。
あるシェルスクリプトを実行し成功するのですが、
remshを使って、
remsh 自分のサーバ名 -n スクリプト名
として、実行すると、sortの処理でエラーが出てしまいます。
sortは、remshを使うとどうしてエラーになってしまうのでしょうか?
ご存知の方は教えていただきたいと思います。

よろしくお願いします。

No. 2002 # 68user 2001/06/07 (木) 20:24:28
>>2001 初男
具体的にどういう書き方をしていて、どういうエラーが出ていますか?

No. 2003 # 初男 2001/06/08 (金) 11:54:34
68userさん、お返事ありがとうございます。

あのあと、調査して、原因がわかりました。
ありがとうございました。

No. 2004 # boo 2001/06/11 (月) 18:05:25
はじめまして!僕はUNIXなどのプログラム関係は全く理解できなかったのですがこちらのサイトではとてもわかりやすく説明されているため大変勉強させていただきまことに感謝いたしております。これからも応援いたしますのでがんばってください。

No. 2005 # ネットワークセキュリティ [E-mail] 2001/06/12 (火) 10:38:08
はじめまして。初訪問で初投稿です.宜しくお願いします.
現在、[A装置]−[Router]−[B装置](簡単に記述)で接続した環境で、RouterにてIP Filteringの設定を追加しようとがんばっています。[A]→[B」は、RCPによるファイルの送受信を行っているため、RCP以外のアプリケーションプロトコル(Telnetとか)を遮断する方法を探しております。
まずは、「全アプリケーションプロトコル遮断」として、「RCPだけ通過」という方法を取ろうと思っているのですが、【RCPのポート番号】が不明です.【RCP】は、Welknown-portではないのでしょうか?UNIXがその都度ポート番号を取得してしまうのでしょうか?ご存知の方教えて下さい.

No. 2006 # 68user 2001/06/12 (火) 14:19:12
>>2005 ネットワークセキュリティ
> 【RCPのポート番号】が不明です
shell 514/tcp です。

こういう場合はサイズの大きなファイルを rcp しておいて、
その間に netstat -a を実行すればよいでしょう。

No. 2007 # hsj 2001/06/12 (火) 15:39:45
>>2005 ネットワークセキュリティ
蛇足ですがセキュリティを気にするのなら
r系のコマンド自体使わない方が良いかと思いますが・・・。

No. 2008 # もっち 2001/06/12 (火) 17:54:27
はじめまして。もっちと申します。
いつも参考にさせていただいています。

はじめて投稿させていただきます。

http⇔https(https⇔https)のsocket通信をC言語で実現させたいのですが、
情報が無い為、何をどうすれば良いのかわかりません。
http⇔httpの通信はこちらのホームページを参考にさせていただいて、
実現することが出来ました。(ありがとうございます)

いろいろ情報を検索して、opensslを使用すれば良いということまでは
わかったのですが、それをどの様に使用すれば、暗号化が行われ、
通信を行い、受信データを複合できるのかわからず、悩んでおります。
情けないのですが、私には余りC言語での開発経験がありません
(普段はPerlを使用しています)
ですので、余計に訳がわからなくなってきております。

どなたか、この問題に関する情報をお持ちの方、いらっしゃらないでしょうか?

開発環境は、Solaris SunOSです。
opensslなど、必要と思われるものは準備されております。
(他に必要なものなどあれば、それも併せて教えていただければ幸いです)

どうぞ、よろしくお願い致します。

No. 2009 # 68user 2001/06/12 (火) 18:17:36
>>2008 もっち
僕には難しいことはわかりませんが、とりあえず
    OpenSSL のマニュアル
        http://www.openssl.org/docs/ssl/ssl.html
    OpenSSL 和訳サイト。古いかも。
        http://www.infoscience.co.jp/technical/openssl/docs/ssl.html
    SSLを使った暗号化通信のやり方
        http://stingray.sfc.keio.ac.jp/security/ssl/ssl.html
    RFC 2246 TLS-1.0 (≒ SSL-3.0)
        http://ring.asahi-net.or.jp/archives/doc/RFC/rfc2246.txt
ここらへんを参考にしてみて下さい。

No. 2010 # もっち 2001/06/12 (火) 19:04:50
>>2009 68user

68user様、早速のご返答ありがとうございます!!

>OpenSSL のマニュアル
の方は、私のほうでも見つけていたのですが、何を書いているのか
理解出来ず、挫折していました。

>SSLを使った暗号化通信のやり方
早速行ってきました。
まだ、詳細まで読んでいませんが、説明がスゴク丁寧で、
私の知りたかった関数の説明までされていて、私のようなC言語未熟者にも
理解できそうな気がします。

教えていただいたサイトを参考にして、実現できる様、頑張って見ます。

実現出来次第、報告に伺います!!

No. 2011 # koji(改称) 2001/06/13 (水) 11:44:46
「ネットワークセキュリティ」の件
>>2007 hsj
    hsjどの
    ご指摘の通り、R系のコマンドを使用している時点でセキュリティに問題ありとは認識しています。。。先にこっちを対応すべきかもしれませんね。参考にさせていただきます。
>>2006 68user
    68userどの
    ポート番号の件ありがとうございます。
    さっそく、設定値反映して確認します。確認結果は後日ご報告します。

No. 2012 # help 2001/06/14 (木) 01:04:17
初めまして、すごく初心者の者です。
早速質問なのですが、HTTPでは要求などを文字列として送ってるだけなのでしょうか。つまり GET /test/test.html HTTP/1.0 などの文字列を相手に送ってるだけでしょか。
相手側では、その文字列を受け取って、Javaのtokenizerとかで、文字を切り出して
s1="GET"
s2="/test/test.html"
s3="HTTP/1.0"
if(s1.equals("GET"){}
でプログラムで処理して結果をクライアントに文字列で返して、
またブラウザが文字列を切り出して、レイアウトしているだけでしょか。
だから、自分でも送られてくる文字列を受けることができて、文字列を見れて、また、HTTPで文字列を返すプログラムが書けるのでしょうか。

また、こんな質問を受け付けてる掲示板をご存知でしたら教えてください。

No. 2013 # 金床 [URL] [E-mail] 2001/06/14 (木) 19:02:08
こんにちは、お邪魔します。

>HTTPでは要求などを文字列として送ってるだけなのでしょうか。
そうです。人間が見て理解できるので楽しいですよ。

>相手側では、その文字列を受け取って、Javaのtokenizerとかで、文字を切り出して
相手側=WWWサーバーと考えると、おっしゃる通りだと思います。
受け取った文字を解釈して、レスポンスを(画像だったりもしますので全て文字列とは限りませんが)ブラウザに送ります。
ブラウザは、受け取ったデータがHTMLの場合はそれを解釈して(文字列を切り出して)レイアウトして表示します。

>だから、自分でも送られてくる文字列を受けることができて、文字列を見れて、また、HTTPで文字列を返すプログラムが書けるのでしょうか。
書けます。
偶然、先日「まさにそれ」というような物を書いたので、良かったら見てみて下さい(だからノコノコ出てきてしまいました)。
http://www.gyosatu.com/jumper/software/MHTTPD/MHTTPD.java

http://www.gyosatu.com/jumper/cgi-bin/bbs/bbs2.pl?bbs=jumper&i=110#3
に、コンパイルと起動の仕方をごく簡単に書いてあります。
#もし分からなくてかつ動かしたかったら言って下さい。

まさに
>if(s1.equals("GET"){}
のような処理をしている筈です。

受け取った文字列を見えるように改造するのも簡単だと思います。

>また、こんな質問を受け付けてる掲示板をご存知でしたら教えてください。
ここが適切だと思います。

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