68user's page 掲示板

Prev< No. 4019〜4119> Next  [最新発言に戻る] [過去ログ一覧]
No. 4019 # さいさん 2004/10/26 (火) 23:04:36
>>4018 68user

>du -k | sort -nr | awk '{ printf("%10d %s\n",$1*1024,$2)}'
と最初はやっていたのですが、$1に設定されるブロックサイズが大きい
と「$1*1024」でオーバーフローを起こし、正しい計算ができないので
systemで、bcで計算をするようなことに

No. 4020 # NL 2004/10/26 (火) 23:08:07
>>4017 さいさん
>>4018 68user

>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

サーバとかOSのバーションとか記述されてませんでしたけど、
「echo -n」は、依存しませんでしたか。

No. 4021 # さいさん 2004/10/27 (水) 09:50:10
>>4107 68user

>>4018 68user
>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

shかcshで異なるみたいです。

バークレイ版では、「\c」 エスケープを「-n」オプションで代用することができます。
echo が csh(1) の組み込み関数として用いられている場合には、バークレイ方式に
従っています。

#du -k $1 | sort -nr | awk '{ system("echo `echo "$1"*1024 | bc` \\\\c"); printf(" %s\n", $2) }'
で、できました。

No. 4022 # ken [URL] [E-mail] 2004/10/27 (水) 23:42:33
こんにちは

kenといいます。

Winsockを使ってネットワークの勉強してまして大変勉強になりました。
ソケットプログラミングを進めていくうちにどうしてもわからない点が発生
したので、もしよろしければとおもいメールしました。

問題はSend()/Recv()でパケットサイズを超えるデータを連続で
送受信させたいのです。
パケットを超える送信をするにはsend()の引数にバッファ、サイズを
そのままのっければ、自動でパケットサイズに切り分けて送信してる
のを確認しました。ですが、受信終了を示す返り値のlengs=0を受信
できませんでした。どうも送ってないようです。httpサーバーに接続して
受信をためしたのですが、lengs=0を確認でき連続で受信することができました。
recv()での受信lengs:0はシャットダウンを意味するとの記述も見つけたのですが、
shutdown()では送信復帰ができないので、使えません。

パケットサイズを超えるデータを連続で送信し受信する時、
受信データの終了を送信したり、受信するにはどうすればいいので
しょうか?
サーバーがファイルの終了を示すleng=0を送信するのは
なにか命令があるのでしょうか?
ソケットをシャットダウンするとleng=0を送信できますが
シャットダウンを復帰できないはずですがしてるのでしょうか?

よかったらレスお願いしますm(__)m
page:homepage3.nifty.com/MIDI-EDITOR/
mail:NQD00781@nifty.com
ken

No. 4023 # 68user 2004/10/28 (木) 03:18:37
>>4022 ken
TCP ですか? それとも UDP ですか?

> パケットサイズを超えるデータ
パケットサイズって具体的に何のことを指していますか?

> 受信終了を示す返り値のlengs=0を受信できませんでした。
送信側で close か shutdown しましたか?

> shutdown()では送信復帰ができないので、使えません。
送信復帰って何ですか?

No. 4024 # どっかん 2004/10/28 (木) 13:12:28
sedを使用して先頭1行目のみ置換を行い、
すべてを出力させたいのですが、どうすれば
よいですか。

sed 's/o=test$/o=honban/g'
とすると置換は行われますが、先頭1行目のみ
だけしたいのです。

CM1: id=00001,nm=test,o=aaa,o=test
CM2: mod
CM3: option
-
CM4: ftp
CM5: get


CM1: id=00001,nm=test,o=aaa,o=honban
CM2: mod
CM3: option
-
CM4: ftp
CM5: get

No. 4025 # ken 2004/10/28 (木) 16:41:37
>TCP ですか? それとも UDP ですか?
TCPです。

>> パケットサイズを超えるデータ
>パケットサイズって具体的に何のことを指していますか?
send()/recv()での送信、受信レングスです。
この場合では、Recv時のレングスです。

>> 受信終了を示す返り値のlengs=0を受信できませんでした。
>送信側で close か shutdown しましたか?
サーバー側でデータを送信し、終了したらshutdown/closeを行うべき
なのでしょうか? 確かにレングス0を受信できますが、その後に
送受信を必要な場合はどうすればいいのでしょうか?
httpサーバーにアクセスした時はレングス0が帰ってきたのですが、
shutdownしていたのでしょうか?


>> shutdown()では送信復帰ができないので、使えません。
>送信復帰って何ですか?
送信の終了を示す、レングス0を送るためにclose/shutdownを使うと、
その後にアクセスができなくなる。
shutodownしたソケットを再使用は危険とMSDNにでてます。

No. 4026 # zsh 2004/10/28 (木) 18:59:37
>>4024 どっかん
sed -e '1s/o=test$/o=honban/'

No. 4027 # 68user 2004/10/28 (木) 19:21:13
>>4025 ken
要は、ピアが送信したデータが全部届いたことを確認したいのですか?
それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
レベルで実現するのが普通です。

例:
    - 送信側は「データ長 + データ」を送信。受信側は最初に受け取った
        データ長の分だけデータを受信したら、全データ到着とみなす。
    - 改行コードをプロトコルのひとまとまりとみなす。送信側は
        データの末尾に改行コードをつけて送信。受信側は改行コードを
        受け取ったら全データ受信とみなす。

端的に言うと、
    recv の戻り値が 0 = FIN が届いたとき
です (ノンブロッキングモードなどの例外はあるかと思いますが)。

で、FIN を投げるには close か shutdown する必要があるということです。

No. 4028 # ken 2004/10/29 (金) 11:47:04
レスありがとうございました。m(__)m
>要は、ピアが送信したデータが全部届いたことを確認したいのですか?
はい。
>それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
>レベルで実現するのが普通です。
httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が
0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか?
だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信
開始する必要があるのかテストする必要を感じました。

何度もレスいただきましてありがとうございました。

No. 4029 # 68user 2004/10/29 (金) 12:37:29
>>4028 ken
> shutdown()がかかっていたと判断していいのでしょうか?
http サーバが shutdown か close したと判断してよいです。

> 再度htmlを受信する場合は、再度acceptでsocketを作成して受信
> 開始する必要があるのかテストする必要を感じました。
再度接続する場合は、クライアント側は socket を生成して connect
しなおす必要があります。サーバ側はリスニングソケットは listen
しっぱなしなので、クライアントが接続しなおしてきたら accept すれば
よいです。

ただし毎回接続・切断を繰り返していては性能が出ないため、HTTP/1.1 に
おいて keep-alive やパイプラインなどの、コネクションを切断せずに
複数のデータを取得するための仕組みが考案されているわけです (これも
アプリケーション層での工夫です)。

No. 4030 # sugimoto 2004/11/01 (月) 19:46:38
>>4001 68user
2週間程前PEM形式ファイルの読み込みで質問した者です。
なんとか手元を離れたので簡単に報告です。
処理は68user様のご指摘の通り行う事で全て対応できました。
色々ありがとうございました。
行ったのは以下の3処理です。
・PEM_read_RSAPrivateKey()でPEM形式ファイルを読み込む処理
    パスワード付きの場合の処理で少し苦労・・・
・RSA_private_encrypt()で暗号化する処理
・Base64エンコードの要求があったので、EVP_EncodeBlock()でエンコー
    ド処理
出来上がれば単純なのですが、着手した時は全くの白紙状態でしたので
本当に助かりました。有難うございました。

No. 4031 # 上田 [E-mail] 2004/11/02 (火) 15:36:15
いつも参考にさせていただいております。
初めて投稿します。
上田といいます。
よろしくお願いします。

『echo サーバを作ってみよう (3)』を参考にして、echoサーバを作成してみました。
概ねはうまくいきました。
しかし、おそらく子プロセスのものだと思うのですが、defunct(ゾンビ)が残ってしまいます。
このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?

ちなみに、私の環境は
Cobalt LINUX 5.0
です。

もし、私の勘違いでしたらすみません。お許し下さい。
以上、よろしくお願いいたします。

上田

No. 4032 # 68user 2004/11/02 (火) 16:30:46
>>4031 上田
> このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?
サンプルプログラムでは wait をさぼっているためゾンビが残ります。
サンプルを直そうと思いつつ、はや 2年近く経ってしまいました。

ひとつのやり方として、
>>2584 persianopeh
のように SIGCHLD をキャッチする方法があります。あるいは WNOHANG を
指定して waitpid してもよいです。

No. 4033 # 上田 [E-mail] 2004/11/03 (水) 12:09:01
>>4032 68user

68userさん、ありがとうございます。
教えていただいた $SIG{CHLD} = sub { wait }; ですが、不勉強なもので、記述する場所に若干の不安が残っています。
一応、43行目と44行目の間に記述したところ、次の3つは達成できました(目的は達成できました)。
・サーバ機能
・複数同時アクセス
・defunctの消去
もし記述する場所が間違っていれば、またご連絡いただけないでしょうか?

      36: # forkで子プロセスを生成
      37: if ( $pid = fork() ){
      38: # こちらは親プロセス
      39: print "親プロセス($$): 引続きポート $port を見張ります。\n";
      40: print "親プロセス($$): クライアントの相手はプロセス $pid が行います。\n";
      41:
      42: # 親プロセスはソケットをクローズ
      43: close(CLIENT);

                              $SIG{CHLD} = sub { wait };  #←←←ここに追加しました。

      44: next;

以上、ありがとうございました。
今後ともよろしくお願いいたします。

上田

No. 4034 # noza [E-mail] 2004/11/04 (木) 16:21:49
Cシェルの中で、sqlplusに接続してsqlを実行して結果を表示したいのですが、どのようにすればよいですか?
皆さん、教えてください。よろしくお願いします。

No. 4035 # アトヌル 2004/11/04 (木) 19:26:06
始めまして。
sedコマンドで、改行を含む文字列へ変換したいのですが、どのようにすればいいですか?

abcde
------
fgh
ijk

たとえば、abcdeをfgh(改行)ijkとしたい場合、

sed "s/abcde/fghijk/g" file1 > file2
これでは改行無しで置換されてしまいます。
\n,\r\nなど埋め込んでみましたがうまくいきませんでした。

皆さん教えてください、宜しくお願いします。

No. 4036 # 2004/11/04 (木) 19:34:08
Cシェルの中で、コマンドオプションの有無を判断するのには、どのようにIF文を書けば良いですか?
教えてください、よろしくお願いします。

No. 4037 # zsh 2004/11/06 (土) 19:36:04
>>4034 noza
ヒアドキュメントを使うとできた筈ですが
sqlplusの引数でユーザ名とパスワードが必要になるため
お勧めしません。

>>4035 アトヌル
sedでは確か無理だったと思います。
(嘘ついてたらごめんなさい。)

>>4036
コマンドオプションって何ですか?引数の事?

No. 4038 # 68user 2004/11/08 (月) 13:49:29
>>4033 上田
fork の前にシグナルハンドラを設定するのが普通かと思います。でないと、
設定前にシグナルが飛んできたら困りますので。

ただしシグナルハンドラは子プロセスに引き継がれるので、fork 後に
シグナルハンドラを戻すなどの対処が必要です (この例では子プロセスが
SIGCHLD を受けることはないので、どちらでも構わないのですが)。

>>4037 zsh
> ヒアドキュメントを使うとできた筈ですが
ヒアドキュメントでもいいし、別ファイルにしておいて
      sqlplus $user/$pass @hoge.sql
としてもよいです。

> sqlplusの引数でユーザ名とパスワードが必要になるためお勧めしません。
これはまぁいいんじゃないですかね。Perl で Oracle に接続しても
スクリプト中にパスワードを書きますし、Pro*C でもバイナリを
strings すればわかりますし。

No. 4039 # yamaさん [E-mail] 2004/11/08 (月) 21:26:09
yahooオークションの自動ログインシステムをプログラムしていますが、ログインできません。
どなたかご教授願います。以下にソースを掲載しておきます。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=********");
            out.print("passwd=*******");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);


            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

post.htmlにはログインされた後の商品ページが表示されます(ログインできれば)

No. 4040 # やまさん [E-mail] 2004/11/08 (月) 21:45:49
yahooオークションの自動ログインプログラムを開発していますが、どーしてもログイン
できません。どなたかご教授願います。以下にソースを掲載します。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=******");
            out.print("passwd=*****");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);
    

            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

なお、post.htmlには正常にログインできれば商品ページのソースを書き込みます。

No. 4041 # waka 2004/11/09 (火) 01:01:14
はじめまして、こんばんは.

http://x68000.q-e-d.net/~68user/net/c-http-1.html
http://x68000.q-e-d.net/~68user/net/c-http-2.html 関連で、
URL の解釈について、
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/pbrowser.html
のような記事を見つけました.
正規表現でも見かけられるやりかたでできるのだなぁと目が覚めました.

質問でもなんでもないのですが、お邪魔しましたm(_ _)m

No. 4042 # 68user 2004/11/09 (火) 01:42:56
>>4040 やまさん
Java の実行環境がないので検証できませんが、普通にブラウザでアクセスし、
ethereal などでパケットダンプしましょう。さらに自作プログラムのやりとりも
同様にパケットダンプして見比べてみましょう。

>>4041 waka
http://www.din.or.jp/~ohzaki/perl.htm#httpURL というのもあります。

scanf 系で %[..] として文字集合が使えるのは初めて知りました。

No. 4043 # クライアント 2004/11/09 (火) 18:21:04
FTPクライアントで分割ダウンロードする場合、
どんなプログラムになるのでしょうか?
HTTPクライアントで分割アップロードする場合、
どんなプログラムになるのでしょうか?
教えて頂けませんか?

No. 4044 # 68user 2004/11/09 (火) 19:45:26
>>4043 クライアント
> FTPクライアントで分割ダウンロードする場合、
> どんなプログラムになるのでしょうか?
REST を使います。

> HTTPクライアントで分割アップロードする場合、
> どんなプログラムになるのでしょうか?
分割アップロードが PUT を指すのか POST を指すのか知りませんが、
規格としては分割アップロードなるものは規定されていないと思います。

サーバ側の CGI なり Servlet なりで引数を解釈するようなつくりに
すれば、なんだって可能です。

No. 4045 # やまさん [E-mail] 2004/11/09 (火) 20:34:29
68userさんご教授ありがとうございます。言われたとおりにパケットダンプしてソースを
書き直したところ、今度はcookieが無効であると言う画面がでました。
書き直したソースは以下の通りです。
import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します


            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");
            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            con.setRequestProperty("Accept-Encoding", "gzip, deflate");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
            con.setRequestProperty("Host","login.yahoo.co.jp");
            con.setRequestProperty("Content-Length","145");
            con.setRequestProperty("Connection","Keep-Alive");
            con.setRequestProperty("Cache-Control","no-cache");






            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1&.done=http%3A%2F%2Fpage7.auctions.yahoo.co.jp%2Fjp%2Fauction%2Fg25311966%3F&.src=auc&lg=jp&.intl=jp&login=formulaatsushi&passwd=formula3");

            out.close();



            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);


            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
etherealのログ
POST /config/login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: login.yahoo.co.jp
Content-Length: 145
Connection: Keep-Alive
Cache-Control: no-cache

HTTP/1.1 302 Found
Date: Tue, 09 Nov 2004 10:41:26 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=0jed4t90p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
Set-Cookie: F=a=2AxMxi8sve2gE8jFN9rJ0gWrAAvZQREqLtzb2_UZvSzjM5JqtaIqse_xaCta&b=pEuj; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
Set-Cookie: Y=v=1&n=2q7rnefmn4krh&l=5ehckb00jiki78/o&p=m2avvjp403000400&r=bk&lg=jp&intl=jp&np=1; path=/; domain=.yahoo.co.jp
Set-Cookie: T=z=W7JkBBWBfkBBIROI05ItUNi&a=YAE&sk=DAA.hvzZ6s/ztd&d=YQFZQUUBb2sBWlcwLQF0aXABYm4ySnNEAXp6AVc3SmtCQmdXQQ--; path=/; domain=.yahoo.co.jp

GET /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc HTTP/1.1
User-Agent: Java1.4.0
Host: login.yahoo.co.jp
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

HTTP/1.1 200 OK
Date: Tue, 09 Nov 2004 10:41:26 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=c0ev5h10p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp


/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311を
getする際にヘッダー情報が変わってしまいます。
どなたかご教授願います。

No. 4046 # 68user 2004/11/10 (水) 14:48:48
>>4045 やまさん
正解は ethereal が教えてくれているはずですので、こういう質問は回答
する側としては非常につまらないのです。だから、質問する側も、もう
ちょっと努力する姿勢を見せてください。

> 今度はcookieが無効であると言う画面がでました
などというわけのわからんことを言っていないで、

    「IE では〜というリクエストを送っているが、Java だと〜という
        リクエストを送信してしまう。IE と同じリクエストを送信するには
        どうしたらよいか」

くらいの質問にブレイクダウンしてください。リクエストとレスポンスを
見比べるだけの注意力があれば簡単なはずです。

あと、HTTP の基本的な知識があるのかないのかさっぱりわからないので、
    http://x68000.q-e-d.net/~68user/net/
        HTTP クライアントを作ってみよう(1)〜(4)
を読んだ上で、telnet を使って接続してみてください。それに成功してから
初めて Java で実現するにはどうすればいいか、という話になるわけです。

一応ヒントだけは出しておきます。
      - /config/verify に cookie なしでリクエストしているのは誰か? まだ
          提示していないソースがあるのか? URLConnection クラスが自動的に
          再接続しているのか?
      - URLConnection が自動的に再接続しているのであれば、
          HttpURLConnection クラスを使って setInstanceFollowRedirects
          メソッドで再接続を抑止し、自前で cookie 付きで再接続してみては。

No. 4047 # 68user 2004/11/10 (水) 14:52:48
>>4046 68user
> 一応ヒントだけは出しておきます。
試したわけではないので、ヒントが的確かどうかは知りません。念のため。

No. 4048 # 68user 2004/11/12 (金) 02:28:59
当分の間、本掲示板での UNIX・ネットワークに関する一般的な質問の受け付けを
中止します。理由は
      http://X68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse
さえ読まないマルチポスト馬鹿のせいで不愉快な思いをするのがアホらしくなった
からです。UNIX・ネットワークに関する一般的な質問がなされた場合、その書き込みを
削除することがあります。

今後は当ページのコンテンツに対するご意見・ご指摘のみ受け付けます。
あと、雑談も OK です。

これまで回答してくださった方々、まともな質問者の方々には深く感謝
いたします。ありがとうございました。

No. 4049 # has 2004/11/13 (土) 22:08:37
>>4048 68user
懇切丁寧な回答、いままでどうもお疲れ様でした。
なんだかんだ結局見てるだけで力になれず、すんません。

ところで、コンテンツに関するご意見・ご指摘は歓迎とのことですし、このまま
何もやりとりが亡くなるのも寂しいので、ちょっと一言。

「POP3クライアントを作ってみよう」で、APOPではサーバ側に生パスワードを
持っていないといけないという点でセキュリティ上イマイチである、と
書かれていますが、それではどんな方法だと納得できそうですか?
(crypt等したパスワードを使うというイメージ or もっとよい案?)

No. 4050 # 上田 2004/11/15 (月) 14:28:33
>>4038 68user
68userさんありがとうございます。返事が遅れてすみません。

実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。
もしよろしければこの部分のコードを教えていただけないでしょうか?
本当は自分なりに勉強してこの部分のコードを書き、このサイトにアップしたいという気持ちはあるのですが、なにぶん初心者なもので。。。

実際のテストでうまくいっているということと、この例では子プロセスがSIGCHLDを受けることはないとのことですので、当面はとりあえず現在の位置で対応させていただきます。
もし『シグナルハンドラを戻すなどの対処』を私なりに見つけることができたら、本サイトで報告させていただきます。

上田

No. 4051 # 68user 2004/11/15 (月) 20:21:20
>>4049 has
その文章を書いたのは 5〜6年前なのでもう忘れてしまいましたが、
改めて考えてみました。

まず、
    - ファイルに生パスワードを保存しておくのはよいことではない
というのは納得していただけるかと思われます。

もちろん、デメリットを上回るメリットがあれば生パスワードを保存
してもよいのでしょうが、APOP については特にメリットらしきものは
見当たりません。

また、管理面からいっても、UNIX のシャドウパスワードと別管理でも
よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。
しかし、APOP では別管理にせざるをえません (選択の余地がない)。

> それではどんな方法だと納得できそうですか?
APOP はサーバがクライアントにタイムスタンプを通知する際、サーバが
保持しているパスワードが
    - 生パスワード
    - パスワードの MD5 値
    - パスワードの SHA-* 値
のいずれであるかを通知する、というのがわたしの考えです。

そうすれば、クライアント側はそれに応じて入力されたパスワードをそのまま
送るか、MD5 値を送るかを決定できます。また、サーバ管理者の方針により、
生パスワードで管理することもできるし、シャドウパスワードと共用にする
こともできます。


なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで
「こいつはわかってない」と評価している人を掲示板などで見かけます
(わたしは何がどうわかってないのかが理解できないので、何ともいえない
のですが)。

>>4050 上田
> 実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。
> もしよろしければこの部分のコードを教えていただけないでしょうか?
$SIG{CHLD} = 'DEFAULT';
です。

No. 4052 # has 2004/11/16 (火) 23:49:40
>>4051 68user
> 管理面からいっても、UNIX のシャドウパスワードと別管理でも
> よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。
> しかし、APOP では別管理にせざるをえません (選択の余地がない)。
そうですね。使う側がやりたいように出来るよう、自由度を持たせておくという
考え方のツールは多い気がしますし。

> サーバが保持しているパスワードが
> - 生パスワード
> - パスワードの MD5 値
> - パスワードの SHA-* 値
> のいずれであるかを通知する
同感です。

> なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで
> 「こいつはわかってない」と評価している人を掲示板などで見かけます
そうなんですか。私にもよくわかっていないようなので誰かに教えて欲しいです。

RFC2195とかにはchallenge-response authentication protocolを使うと
サーバにパスワードを*平文で保存せずに済む*とあるようです。
ひょっとしてパスワードとは別の、もっと重要なことが理解できてない
ということなのかもしれないですね…。

No. 4053 # 68user 2004/11/17 (水) 14:33:25
>>4052 has
> RFC2195とかにはchallenge-response authentication protocolを使うと
> サーバにパスワードを*平文で保存せずに済む*とあるようです。
なるほど。

    http://www.lins.jp/~obata/imap/rfc/rfc2195ja.html
        鍵付き MD5 ダイジェストを利用し、サーバ上に平文で秘密鍵が保管
        される必要はないので、RFC 1734 で規定される POP3 の使用のための
        APOP より改善されたものからなるともいえる。

ということで、APOP はイマイチと自信を持っていえるようになりました。
該当ページもそのうち加筆・修正しておきます。

ところで RFC 2195 は IMAP と POP に CRAM を導入しよう、というものですが、
IMAP では CRAM-MD5 や CRAM-SHA に対応した実装がいろいろありますけど、
POP の方は普及してるんですかねぇ。

http://risky.cs.inf.shizuoka.ac.jp/~ynoguchi/index.php?POP%20(%20courier-pop%20)
には
      (courier-pop は) courier-imap と同様,CRAM-MD5, CRAM-SHA に対応可能
      だが,結局,そのプロトコルに対応するクライアントがない
とありますし。

No. 4054 # 68user 2004/11/17 (水) 20:04:11
>>4053 68user
更新しました。
    http://x68000.q-e-d.net/~68user/net/pop3-3.html

「シャドウパスワードと共通化できない」という批判は、CRAM-MD5 でも
共通化できないような気がしたので (crypt には salt があるけど、
CRAM-MD5 にはないし、CRAM-MD5 には ipad とか opad とかがあるけど、
crypt にはないから)、とりあえず削除してあります。

No. 4055 # やまさん 2004/11/18 (木) 22:50:36
>>4047 やまさん
68userさんお返事遅くなりました。四苦八苦しましたけど
ヒントいただいた通りプログラムを組みなおしたところ、
無事ログインできました。ありがとうございました。

No. 4056 # 68user 2004/11/20 (土) 04:12:12
なんとなくアンケートをとってみることにしました。
      http://X68000.q-e-d.net/~68user/tmp/questionnaire.cgi

No. 4057 # 68user 2004/11/24 (水) 00:24:59
「UNIX の部屋」を更新しました。
      http://X68000.q-e-d.net/~68user/unix/

No. 4058 # へにか [URL] 2004/11/24 (水) 07:42:01
http://x68000.q-e-d.net/~68user/unix/pickup?freebsd-update
注意点は以下の通り。とある文言の、
<li>freebsd-updateの<li>、
HTTP 経由でファイルを\取得するので、の\、
これらは、誤植でしょうか? でも、ソースを見ると<LI>と大文字で書かれてるし・・・

No. 4059 # 68user 2004/11/25 (木) 01:15:20
>>4058 へにか
ありがとうございます。修正しました。

誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。

No. 4060 # へにか 2004/11/25 (木) 08:29:07
>>4059 68user
> 誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。
了解しました。気になったので、検索かけたら・・・ 何て言っていいのやら。

No. 4061 # 68user 2004/11/28 (日) 04:14:13
日記。

    % mkdir dir
    % touch dir/file
    % chmod 400 dir
    % ls -l dir

としたとき、dir/file を stat(2) する権限がないわけなので、Permission
denied となる (Linux・Solaris では実際にそうなる)。
# http://x68000.q-e-d.net/~68user/unix/pickup?chmod

ところが FreeBSD では何も表示されず (エラーも出ず)、exit status も 0
で正常終了してしまっている。

これを調べようと、FreeBSD 5.2.1-RELEASE の ls ソースを見てみる。
# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/

ずっと ls ってのは opendir して readdir して stat するものだと信じていたが、
実際には
      fts(3) -- traverse a file hierarchy
      http://www.freebsd.org/cgi/man.cgi?query=fts&manpath=FreeBSD+5.3-RELEASE+and+Ports&format=html
を使っていて、上記のシステムコールは間接的にしか使用していなかった。

>>3773 68user
で買った本を読むと、しっかり書いてあった。
      この人の書く文章にはおもしろみのかけらもなく
なんて文句言う前に、ちゃんと目を通すべきということか (全然読んでなかった)。

fts(3) は 4.4BSD から実装され、GNU 方面では glibc2 で採用された。glibc の
マニュアルには
        BSD 4.4. fts ユーティリティは、将来の St -p1003.1-88 リビジョンに
        含まれると期待されている。
と威勢のいいことが書いてあるが、少なくとも Solaris9 には実装されていない。


はじめて fts(3) を使ってみる。以下のプログラムで、stat できない場合エラーと
判断できている。FreeBSD の ls にはそれっぽい箇所があるにはあるが、その処理が
うまく機能していないのか、あるいは謎の仕様なのか…。

-----
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fts.h>

main(){
        FTS *ftsp;
        char *path[2]={"dir", NULL};
        ftsp = fts_open(path, FTS_PHYSICAL | FTS_NOCHDIR, NULL);
        if ( ftsp == NULL ){
                perror("fts_open");
                exit(1);
        }
        FTSENT *ftsentp;
        while (1){
                ftsentp = fts_read(ftsp);
                if ( ftsentp == NULL ){
                        break;
                }

                struct stat *sp = ftsentp->fts_statp;

                printf("%c", sp->st_mode&S_IRUSR ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWUSR ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXUSR ? 'x' : '-');
                printf("%c", sp->st_mode&S_IRGRP ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWGRP ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXGRP ? 'x' : '-');
                printf("%c", sp->st_mode&S_IROTH ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWOTH ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXOTH ? 'x' : '-');
                printf(" %d %s\n", sp->st_mode, ftsentp->fts_path);

                if ( ftsentp->fts_info == FTS_NS ){
                        perror("stat failed");
                        exit(1);
                }
        }
        exit(0);
}
------

あと、
      http://www.freebsd.org/cgi/man.cgi
にて FreeBSD 5.3-RELEASE からは ports マニュアルも検索できるように
なっていることに気づいた。これは大変素晴らしい。

No. 4062 # 68user 2004/12/05 (日) 04:03:48
>>4056 68user
> なんとなくアンケートをとってみることにしました。
アンケートの受付を (11/27 の時点で) 終了しました。結果をお知らせします。

[質問]
68user's page で今後読みたいコンテンツがあれば選択してください (複数選択可)。

[選択肢]
1. UNIX コマンドのコンテンツ充実
2. UNIX howto (「〜するには?」集のようなもの)
3. UNIX インストール・サーバ構築
4. ネットワークプログラミングのコンテンツ充実
5. web と CGI についてのコンテンツ充実 (含 Java Servlet・EJB)
6. C 言語講座的なもの
7. 業務系システム構築講座 (設計・コーディング・DB)
8. プログラマや SE の仕事について思うことをつらつらと

[結果]
回答総数 67

1. 36(17%) ************************************
2. 42(20%) ******************************************
3. 27(13%) ***************************
4. 29(14%) *****************************
5. 13(06%) *************
6. 14(06%) **************
7. 18(08%) ******************
8. 25(12%) *************************

[感想]
1・2 が多いのは予想していましたが、5・6 が少ないのは予想外でした。

5 は書きかけのコンテンツのまま放置してあるので、その辺の情報を今ほしい
人はここにはいないってことでしょうか。6 は世の中は意外と保守的で、仕事で
いまだに C でごりごり書いている (書かされている) 人が多数いるに違いない
と予想したのですが、はずれたようで。

あと、7 より 8 の方が多いのもちょっと不思議です。


頂いたコメントについてですが、
> div 開始タグより div 終了タグが圧倒的に多い
とりあえず気づいたところは直しました。自分で確認して、あまりにも
閉じ側が多いので笑ってしまいました。

あと、
>>3951 ほんたか
> 1.「h 1文字左に移動」がリストからはみ出ています。
も直しました。

アンケート結果は今後の参考にさせていただきます。ありがとうございました。

No. 4063 # 68user 2004/12/06 (月) 02:27:19
「ネットワークプログラミングの基礎知識」に
      HTTP クライアントを作ってみよう(5) - 認証編 -
          http://X68000.q-e-d.net/~68user/net/http-auth-1.html
を追加しました。

No. 4064 # sqh00 [E-mail] 2004/12/19 (日) 13:12:22
こんにちは。 こちらのサイトに来るのは今日が初めてですが、内容が充実していて大変参考になるサイトですね。 今後も利用させて頂こうと思います。さっそくですが、xlibについて質問をさせてください。http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html のxlib-1.c を
cc -o xlib-1 xlib-1.c -I /usr/X11R6/include -lX11 -L /usr/X11R6/li のように実行したら、何にも出て来なかった。私が使っているのは red hat linux 8.0です。宜しくお願いします。

No. 4065 # 68user 2004/12/20 (月) 00:08:34
>>4064 sqh00
カレントディレクトリに xlib-1 というバイナリが生成されているか、
あるいは何かしらのエラーメッセージが出力されていると思いますので
確認してみてください。

No. 4066 # sqh00 [E-mail] 2004/12/20 (月) 22:17:10
カレントディレクトリに xlib-1 というバイナリが生成されているが、実行できない。このように、実行したら、何にも出て来なかった。
  
      [root@dm1511 xlib]# xlib-1
        bash: xlib-1: command not found

No. 4067 # 68user 2004/12/20 (月) 22:35:27
>>4066 sqh00
カレントディレクトリにあるバイナリは
    % ./xlib-1
と実行してください (% はプロンプト)。

No. 4068 # sqh00 2004/12/22 (水) 14:30:39
実行ができました。ありがとうございます。

No. 4069 # 68user 2004/12/23 (木) 06:52:27
「ネットワークプログラミングの基礎知識」に
      HTTP クライアントを作ってみよう(6) - Digest 認証編 -
            http://X68000.q-e-d.net/~68user/net/http-auth-2.html
を追加しました。

ところで cnonce は選択平文攻撃への耐性を高める効果があるとかなんとか
知ったかぶって書いてしまいましたが、cnonce がないと具体的にどういう
攻撃ができるんでしょうかね。

差分解読法かなぁと思ったんですが、MD5 に差分解読法って有効なんでしょうか。
あるいは salt 的な意味合いがあるんでしょうか?

いまいちイメージがわかない。

No. 4070 # たなか 2004/12/28 (火) 00:04:48
「ネットワークプログラミングの基礎知識」で勉強させていただいています。
kqueue の説明をみて早速いぢってみました。
サンプルでは kqueue() の戻り値に対して、終了時の処理が何もされていません。
man で調べたたところ、kqueue() の戻り値はファイルデスクリプタと記されています。
init kq = kqueue();
close(kq);
としても、close の戻り値が -1 で閉じることができませんでした。
なので、
init kq = kqueue();
close(kq);
init kq = kqueue();
close(kq);
とすると、kq は 1 回目が 9、2 回目が 10 といったようにインクリメントされてしまいました。
fcntl で kq の情報を取得しようとしてもすべての戻り値は -1 でした。
なんとなく、ファイルデスクリプタとして扱えていないような気がします。
当方は Mac OS X 10.3.7(BSD 4.4 ベースの Darwin) です。
本当の BSD なら、close できるものなのでしょうか。
もし、kqueue の説明を追加する予定があるようでしたら、close または、それに代わる処理も追加してもらえると大変助かります。

No. 4071 # 68user 2004/12/30 (木) 03:31:09
>>4070 たなか
> 本当の BSD なら、close できるものなのでしょうか。
FreeBSD 5.2-RELEASE では close(2) できました。ちなみに
カーネルには queue 用を close するコードも含まれています。

詳しくないので事情はわかりませんが、Mac OS X (Darwin?) の
問題ではないかと思います。

> close または、それに代わる処理も追加してもらえると大変助かります。
echo サーバばかり作っていると終了処理がおろそかになっていけませんね。
「quit」を送ると終了するようにするなど、何かしら考えたいと思います。

No. 4072 # たなか 2004/12/30 (木) 09:44:40
>>4071 68user

どうもありがとうございます。

>> 本当の BSD なら、close できるものなのでしょうか。
> FreeBSD 5.2-RELEASE では close(2) できました。ちなみに
> カーネルには queue 用を close するコードも含まれています。

手元に BSD が動作するマシンがないので、実験できませんでした。
Darwin の問題ですね。Apple に連絡してみます。
下のコードを実行すると次のような結果となります。

kqueue : 3
close(3) : -1
close: Bad file descriptor
kqueue : 4
close(4) : -1
close: Bad file descriptor

------------------------------------------------
#include <stdio.h>

#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>

#include <unistd.h>

int
main() {

        int kq;
        int ret;

        kq = kqueue();
        printf("kqueue : %d?n", kq);
        if (kq == -1) {
                perror("kqueue");
        } else {
                ret = close(kq);
                printf("close(%d) : %d?n", kq, ret);
                if (ret == -1) {
                        perror("close");
                }
        }

        kq = kqueue();
        printf("kqueue : %d?n", kq);
        if (kq == -1) {
                perror("kqueue");
        } else {
                ret = close(kq);
                printf("close(%d) : %d?n", kq, ret);
                if (ret == -1) {
                        perror("close");
                }
        }

        return 0;
}
------------------------------------------------

No. 4073 # さいさん 2004/12/30 (木) 18:01:49
サーバがHP-UX11.00で、Bシェルでシェルを書いています。
シェル中で、「ls *.txt」を実行しています。

"*.txt"が存在しない場合、エラーが出力されるので、
「ls *t.xt > /dev/null 2>&1」で、エラーを出さないよう
にしました。

そこで、lsの処理に"grep -v"を追加し、"*.txt"がない
状態にすると「*.txt がみつかりません。」がでます。

ls *t.xt | grep -v "kekka" > /dev/null 2>&1

エラーがでないようにするにはどうしたらよいのですか。

No. 4074 # zsh 2004/12/31 (金) 18:57:02
ここで質問する人のブラウザには、
「UNIX・ネットワークに関する一般的な質問は受け付けていません。」
という一文は映らないのだろうか?

>>4073 さいさん
最終的にどうしたいのか良く判らないが、取りあえずはこれで。
ls *txt 2>/dev/null | grep -v "kekka"

No. 4075 # さいさん 2005/01/01 (土) 16:34:07
>>4074 zsh

ありがとうございます。

実際にしたいことは、
シェルを実行した際、「*.txt がみつかりません。」を
標準出力したくないのと、戻り値の判定をしたいのです。

ls *.ldif | grep -v "kekka" > /dev/null 2>&1
if [ $? -ne 0 ] ; then
        echo "Text File Nothing Today"
        exit 0
fi

No. 4076 # さいさん 2005/01/01 (土) 16:36:28
>>4075 さいさん

すみません。
間違いがありました。


実際にしたいことは、
シェルを実行した際、「*.txt がみつかりません。」を
標準出力したくないのと、戻り値の判定をしたいのです。

ls *.txt | grep -v "kekka" > /dev/null 2>&1
if [ $? -ne 0 ] ; then
                echo "Text File Nothing Today"
                exit 0
fi

No. 4077 # zsh 2005/01/03 (月) 00:17:18
>>4076 さいさん
結果的にファイルの有無を確認したいんですよね?
だとすれば、戻り値のチェックよりも下記のようにしては如何でしょうか?

set -- `ls *txt 2>/dev/null | grep -v "kekka"`
if [ $# -eq 0 ] ; then
        echo "no file."
fi

※:シェルに引数を与えている場合等は考慮が必要です。

No. 4078 # さいさん 2005/01/04 (火) 15:57:43
>>4077 zsh

ありがとうございます。

set -- `ls *txt 2>/dev/null | grep -v "kekka"`

「set -- `ls 」
の使い方教えてください。
どのような意味なのですか

No. 4079 # zsh 2005/01/05 (水) 10:38:55
set --
で引数(定位置パラメタだっけ?)を書き換えることが出来ます。

今回の場合は、
ls *txt 2>/dev/null | grep -v "kekka"
の出力で置き換える事になりますので、
$#で上記コマンドの結果出力されたファイル数を参照できます。

No. 4080 # さいさん 2005/01/09 (日) 14:24:11
>>4079 zsh

お礼遅くなって申し訳ありません。
ありがとうございます。

>set --
>で引数(定位置パラメタだっけ?)を書き換えることが出来ます。

参考本とかで調べてます。

No. 4081 # しょしん [E-mail] 2005/01/21 (金) 14:40:41
ご存知の方おられましたら、ご教授ください。
環境OSは、Win2000です。
OpenSSLライブラリを利用したDER形式の鍵ファイルの読み書き方法を実装方法が
わかりません。i2d_RSAPrivateKey、d2i_RSAPrivateKeyを利用し、ファイル出力
をしてみましたが、_fp付きはエラーです。(_bio付きはOK)
また、ここで出力された鍵ファイルは、OpenSSLでは、暗号/復号可能です。
しかし、他社製品(RSA BSAFE)では、鍵ファイル読み込みエラーとなります。
rsaコマンド等で変換作業を行うと読み込み可能となり、暗号・復号ができます。
なんだか理解できません。
以上、宜しくお願い致します。

No. 4082 # 68user 2005/01/21 (金) 15:17:49
>>4081 しょしん
暗号に関する一般的な質問も受け付けていません。

    ■暗号技術【ROUND2】■
    http://pc5.2ch.net/test/read.cgi/tech/1088530204/l50

などで質問してください。

- OpenSSL のバージョンくらい書きましょう。
- 何を知りたいのか不明。_bio 付きで出力して、rsa コマンド等で
    変換して、RSA BSAFE で読み込めているんなら別にいいのでは。
    例えば「rsa コマンドに頼りたくない」「なぜ rsa コマンドを
    使わなければいけないのかわからないので、解説してほしい」
    などと書くべき。
- 単に _fp 付きはエラーと言われても、「コーディングミスでは?」
    くらいしか返す言葉はありません。つーか、ソースくらい提示しましょう。

No. 4083 # >>4082 2005/01/21 (金) 16:20:40
内容不備&質問場所違いでした。
大変失礼しました。
撤収します。

No. 4084 # yoshiki 2005/01/25 (火) 09:47:00
CGIでmkdirとかmountとかを呼び出す方法をご教授願います。
サーバー上でプログラムを実行させたいのですが、動作しませんでした。

C言語にてCGIプログラムを作っています。
execveを使用してもうまく動作しませんでした。


------- test.c (test.cgi) -----------------------
#include <stdio.h>

int main()
{
    char *argv[3];
    argv[0]="/bin/mkdir";
    argv[1]="test";
    argv[2]=NULL;

    int pid=fork();
    if(pid==0){
        execve(argv[0],argv,NULL);
        perror("execve");
        exit(0);
    }
    return 0;
}

No. 4085 # yoshiki 2005/01/25 (火) 09:48:43
↓↓
#include <unistd.h>

が抜けていました。
よろしくお願いします。

No. 4086 # たらい 2005/01/26 (水) 18:10:01
はじめまして。
いつも「UNIXの部屋」を利用させていただいています。

awkコマンドのところですが、誤字がありましたのでお知らせさせていただきました。
****************************************************************
特殊なパターンとして BEGIN と END がある。BEGIN は最初に実行され、END は最後に実行される。
% ls -l | awl 'BEGIN { print "START!"} {total+=$5; print $9} END {print "size total="total} '
****************************************************************
1つ目のパイプの後の「awk」が「awl」になっています。

「awkのエイリアスです。」なんていわれたら、どうしようもありませんが…。

取り急ぎ、ご連絡までに…

No. 4087 # 68user 2005/01/26 (水) 19:11:43
>>4086 たらい
修正いたしました。ご指摘ありがとうございました。
    http://X68000.q-e-d.net/~68user/unix/pickup?awk

No. 4088 # tansy [URL] 2005/01/27 (木) 04:45:52
ライセンスについて質問です。
このサイトにあるコードはフリーソフトウェアと考えてよいでしょうか。
チュートリアルサイトなのでコードを自由に利用してよいだろうとは思ったのですが、
念のため確認させてください。

具体的にはecho-server-select.cを参考にしながらプログラムを書いたのですが、
将来それをフリーソフトウェアとして配布したいと考えています。
問題ないですよね?
問題あるなら空で書けるように修行してやり直すことになるのですが…。

ちなみに作っているものはこれ
  http://humming.dip.jp/bardic/
でネットゲームのようなものです。

よろしくお願いします。

No. 4089 # 68user 2005/01/27 (木) 13:10:16
>>4088 tansy
> 将来それをフリーソフトウェアとして配布したいと考えています。
> 問題ないですよね?
はい、問題ありません。ただしエラーチェックが甘めなので、それを踏まえた上で
お使いください。


ついでなのでライセンスを明確にしたいと思います。

わたしが書いたプログラムは、特に明記していない場合は修正 BSD ライセンスと
します (現時点で修正 BSD ライセンス以外のライセンスを適用しているプログラム
はありません)。

わたしが書いた文章は、フリーではありません。ただし (言うまでもありませんが)
著作権法における引用は可です。

No. 4090 # tansy [URL] 2005/01/27 (木) 15:53:06
>>4089 68user
修正BSDライセンスであること了解しました。
> ただしエラーチェックが甘めなので、それを踏まえた上でお使いください。
了解です。

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

No. 4091 # 亜紀 2005/02/06 (日) 14:14:32
はじめまして。今卒業研究に必死に取り組んでいるんですけども、
ソケットプログラミングがよく分かりません・・・

sendやrecvなどを使って、更新されていくデータを一定時間
ずーっと送信、もしくは受信ってできますか?

研究室も誰もいないし、聞けるのはみなさんしかいません。うう。
どうかお願いします。

PS.焦っているので、他の掲示板などでも同様の書き込みをするかもしれません。
      ここが最初ですが、もし他の掲示板から何かいいアドバイスをいただけましたら、
      すぐに反映させていきたいと思います。よろしくお願いします。

No. 4092 # のぷお 2005/02/07 (月) 22:55:00
亜紀さん

質問の内容が漠然としているので、ちょっと答えずらいのですが。。。
一定時間ずっと、送信もしくは受信することはできますよ。
まあ、ソケットはありふれたものなので、インターネット上を検索すれば、
ソースコードの例は簡単に見つかると思いますよ。
ソケット、socket、ソースなどのキーワードで検索すれば簡単に見つかるかも。

焦る気持ちはわかりますが、同じ質問を複数の掲示板に書き込む行為は良く
ないので、やめたほうがいいですね。

では。

No. 4093 # tanaka 2005/02/15 (火) 16:44:32
JAVA から cシェルを実行したいのですが どのように記述すればよいのでしょうか。

Runtime rt = Runtime.getRuntime();
String[] command = {"/root/scripts/t.csh"} ;
Process process = rt.exec(command);

と記述しておりますが、実行できず困っています。

No. 4094 # とも 2005/02/16 (水) 03:03:50
UNIXのシェルスクリプトについて教えて下さい。
OSは、HP-UX11.00です。

ファイル中に存在するある文字列をsedを使用して置換して
いるのですが、sedで置換を行うとき条件を指定して実行する
ことはできるのでしょうか。

id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip
aaaaaa,bbbb,code=vip,code=ip
bbbbb,bbbb
id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip
aaaaaa,bbbb,code=vip,code=ip
bbbbb,bbbb
id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip
aaaaaa,bbbb,code=vip,code=ip
bbbbb,bbbb
id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip

sed 's/code=vip$/code=normal/g' ファイル名
とすると「code=vip」がある行に対して置換が行われます。

先頭が、"id: "から始まる行のみ「code=vip」を「code=normal」に
置換したいのですが、sed1回で可能でしょうか。
それとも、作り込みが必要でしょうか。

No. 4095 # ばんじょう 2005/02/17 (木) 18:20:35
Solaris8のcshについて教えて下さい。

nawkを使用しているのですが、1行での表記が長いので手頃なところで改行
して見易いように複数行にしたいのですが、その場合、これは、1行の処理
ですと認識させたいのですが、どのようにすればよいのですか。

¥、&、$とかつけてみたのですが、「Unmatched '」がでてしまいます。
お願いします。

#!/usr/bin/csh
#

set sys_no = "99"

set aaa=`nawk -v NO=$sys_no -F":" '/^[ \t]*#START/,/^[ \t]*#END/ \
            { if (substr($1,1,1) != "#" && substr($1,1,2) == NO) print $2 }' list.txt`

echo $aaa

No. 4096 # zsh 2005/02/17 (木) 19:00:58
>>4094 とも
sed -e 's/^\(id.*code=\)vip/\1nomal/' file
とか
sed -e '/^id/ { s/code=vip$/code=normal/
}' file
あたりでできます。

>>4095 ばんじょう
「\\」でいけたと思います。
・・・正直cshはやめた方が良いと思いますが・・・

No. 4097 # ばんじょう 2005/02/17 (木) 22:24:13
>4096

>「\\」でいけたと思います。
でやってみましたが無理でした。
動きはしましたが、nawk内の条件が無視され全て取り出されました。
ふと、もう1個ふやしたらどうなるのだろうと、「\\\」でやって
みたところ上手くいきました。いった模様です。
しかし、変ですね。怖い環境、怖いcshだと。

>・・・正直cshはやめた方が良いと思いますが・・・
ということは、shとかbashですか。
Solarisは、bashが多いですが・

No. 4098 # とも 2005/02/17 (木) 22:39:34
>>4096 zsh

>sed -e 's/^\(id.*code=\)vip/\1nomal/' file
では、上手く行きました。

>sed -e '/^id/ { s/code=vip$/code=normal/ }' file
では、
sed: 関数 /^id:/ { s/code=vip$/code=normal/ } はパースできません。
となりました。

No. 4099 # やまげん 2005/02/17 (木) 22:47:30
>> 4096


参考に、sedで使用している
「's/^\(id.*code=\)vip/\1nomal/' 」
「'/^id/ { s/code=vip$/code=normal/ }' 」
の使い方について教えて下さい。

No. 4100 # zsh 2005/02/18 (金) 16:09:22
>>4098 とも
}の前に改行を入れないと動作しません。
(実装しているsedの違いかもしれませんが。)

>>4099 やまげん
説明下手なので、この辺を参考にしてください。
ttp://pegasus.rutgers.edu/~elflord/unix/sed.html

No. 4101 # やまげん 2005/02/19 (土) 15:01:47
>>4100 zsh

>説明下手なので、この辺を参考にしてください。
>ttp://pegasus.rutgers.edu/~elflord/unix/sed.html
英語なんですね。

No. 4102 # zsh 2005/02/21 (月) 09:40:16
>>4101 やまげん
それじゃあ簡単に。

"\("と"\)"で囲まれた部分にマッチした文字列は、
変数に格納され、順番に\1,\2で取り出す事が可能です。

/Pattern/ {
  command
}
でPatternに一致した行に対してcommandを実行します。

こんな感じですかね。
正直、自分の解釈が間違っている可能性があるので、
あまり人に教えることはしないのですが。。。

No. 4103 # 高嶋屋 2005/02/21 (月) 11:03:35
はじめまして、高島屋です。
solarisでC言語にてアプリケーションを作成する際の、1プロセスが可能なファイルオープンのMAX値について教えていただけないでしょうか?
実際にopen可能な、、と言う意味ではなく、「メーカで保障されている」MAX値を調査しています。
利用しているコンパイラは「SunOneStudio8」。
まず、当方で調査した結果を報告致します。

・ANSI規格の規格では8以上とされている。(「新ANSIC言語辞典」技術評論社→コンパイラに対して8以上を保障しなさいと言う意味だと思います)
    ただし、/usr/include/isostdio_iso.hでは、FOPEN_MAX=20と設定されている。(CPU=SPARK)
・solris
limit,sysdefコマンドで確認した所、
limitコマンドでのファイル記述子の最大数は256。
sysdefコマンドのfile descriptorsに関する、"process Resource Limit"の値も共に256。
実際に1プロセスで256ファイル以上をオープンすると、それ以降のファイルオープンが失敗しました。

・その他 システム全体で同時open可能なファイルの最大数があるのかは不明(調査不足)
なお、sysdefコマンドで確認した所、maximum number of process = 30000
maximum processes per user id = 29995の制限値が設定されていました。

ただ、上記はあくまで、実際に設定されている値で、それぞれのメーカーが保障している値ではありません。
SunOneのマニュアルからも最大値の記述は読み取れませんでした。(調査不足?)

Q1.FOPEN_MAXの20と言うのは何に利用されているかご存知ですか?CPUにより異なる様なのですが。。
プロセスを最大数立ち上げた際にオープン出来るファイルの最大数と言う事なのしょうか?


Q2.コンパイラごとに異なるものなのでしょうか?OSやCで決まるものなのでしょうか?
何を基準に(c?solaris?コンパイラ?)マックス値を調査すればよいのでしょう?

Q3.漠然とした質問で申し訳無いのですが、上記の様なファイルオープン数のメーカーからの保障について、どなたかご存知ですか?
    
以上、拙文で申し訳ないのですが、ご存知の方ご教授下さい。

No. 4104 # 68user 2005/02/21 (月) 23:44:19
質問は受け付けないって書いてあるのに、変わった人たちですね。
まぁいいですけど。

> Q1.FOPEN_MAXの20と言うのは何に利用されているかご存知ですか?
Solaris8 の stdio(3) には以下のように記述されています。
      The integer constant FOPEN_MAX specifies the minimum number
      of files that the implementation guarantees can be open
      simultaneously.

JIS X 3010 (C99 相当) には以下のように記述されています。
      FOPEN_MAX は、同時にオープンできることを処理系が保証するファイル
      数の最小値をあらわす整数定数式に展開する。

なお、FOPEN_MAX は最大値ではなく最小値です。「少なくともこれだけは
オープンできる」という値です。


FOPEN_MAX が具体的にどう使われているか、という話であれば、処理系
依存です。たとえば FreeBSD であれば libc において
      static FILE usual[FOPEN_MAX - 3];
などと使われており、リソースを確保しなおすことなくオープンできる
ファイル数が FOPEN_MAX である、という形になっているようです。

Linux などで使われている glibc においては FOPEN_MAX を一切使用して
おらず、意味のない値になっています。Solaris はソースを持ってないので
知りません。

> Q2.コンパイラごとに異なるものなのでしょうか?OSやCで決まる
> ものなのでしょうか?
何がですか? FOPEN_MAX が?

> Q3.漠然とした質問で申し訳無いのですが、上記の様なファイルオープン数の
> メーカーからの保障について、どなたかご存知ですか?
「保証する値」にこだわるのであれば、メーカーに問い合わせるのが
一番かと思います。

No. 4105 # tkb 2005/02/23 (水) 10:30:53
http://x68000.q-e-d.net/~68user/net/http-auth-2.html
にある「クライアント対応状況」ですが、apache本体(2.0.51以降)に
パッチが取り込まれています。

http://httpd.apache.org/docs-2.0/mod/mod_auth_digest.html#msie

ご参考まで。

いつも勉強させてもらってます。
これからもすばらしいコンテンツ期待しています。

No. 4106 # さいさん 2005/02/23 (水) 22:51:54
Solaris8のshについて教えて下さい。

shでシェルを書いています。
もともとは、HP-UX11.00で動かしていたのをSoralisに移しました。

位置パラメータを使ってlsの結果(個数)を取得し、ファイルが存在
しているか、存在しないかのチェックをしています。
ファイルが存在しないときは、不要なメッセージを出力しないように
もしています。
その際、ファイルが存在しなった場合、0件として終了してくれません。
位置パラメータの個数が"1"で取得されます。
引数で、チェックするディレクトリを判断するためのパラメータを渡して
いるのですが、どうやらこの引数や値が引き継がれているみたです。
上手く処理するにはどうしたらよいのですか。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#!/bin/sh
#

PATH=${PATH}:/usr/bin:/etc:/usr/ccs/bin:/usr/local/bin:.; export PATH
TZ=JST-9; export TZ

if [ $# -lt 1 ] ; then
        echo "Parameter Error"
        echo "$0 Processing MODE [R:real/B:batch]"
        exit 1
fi

mode=$1

if [ ${mode} = "R" ] ; then
        DIR="/tmp/real"
elif [ ${mode} = "B" ] ; then
        DIR="/tmp/batch"
else
        echo "Processing MODE Error"
        echo "Processing MODE = [R:rela/B:batch]"
        exit 1
fi

cd ${LDIF_DIR}

set -- `ls *.txt 2>/dev/null | grep -v "_kekka_"`
if [ $# -eq 0 ] ; then
        echo "Ldif File Nothing Today"
        exit 1
fi
echo $*
cnt=$#
echo ${cnt}

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

No. 4107 # 68user 2005/02/23 (水) 23:17:10
>>4105 tkb
> 「クライアント対応状況」ですが、apache本体(2.0.51以降)に
> パッチが取り込まれています。
これは知りませんでした。早速追記しました。
      http://x68000.q-e-d.net/~68user/net/http-auth-2.html

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

No. 4108 # zsh 2005/02/25 (金) 11:06:34
>>4106 さいさん
> 引数で、チェックするディレクトリを判断するためのパラメータを渡して
> いるのですが、どうやらこの引数や値が引き継がれているみたです。
位置パラメタは「set --」でクリアできますが、本当に引数を引き継いでいますか?
(「echo $*」部分で引数が出力されてますか?)

No. 4109 # さいさん 2005/02/25 (金) 12:54:44
>>4108 zsh

>(「echo $*」部分で引数が出力されてますか?)
起動時に渡した、RまたはBが表示されます。
「echo #?」も1と表示されます。

No. 4110 # 68user 2005/02/28 (月) 01:36:04
「UNIX の部屋」を更新しました。
    http://X68000.q-e-d.net/~68user/unix/

No. 4111 # んー 2005/02/28 (月) 23:55:22
>> 4109
#!/bin/sh -> #!/bin/ksh

man sh
man ksh

No. 4112 # zsh 2005/03/01 (火) 13:02:26
>>4112 zsh
Solaris8入ってるマシン3台くらいで確認したんですけど
shでも通常はそんな動作にはならないんですよ。
一度
set --
でリセットした方が確実かなと思います。

No. 4113 # zsh 2005/03/01 (火) 13:03:24
×
>>4112 zsh


>>4111 んー

失礼しました。

No. 4114 # 野暮天 2005/03/03 (木) 19:58:03
Tee の説明文中
find . -name a\* だと a から始まるファイル名が返って来ますよね.

No. 4115 # さいさん 2005/03/03 (木) 22:28:31
>>4112 zsh

>一度
>set --
>でリセットした方が確実かなと思います。

とやってみたんですが、かわりなしです。

No. 4116 # 68user 2005/03/03 (木) 22:34:21
>>4114 野暮天
ご指摘ありがとうございます。修正しました。
http://X68000.q-e-d.net/~68user/unix/pickup?Tee

No. 4117 # zsh 2005/03/05 (土) 10:55:05
>>4115 さいさん
じゃあshiftで一つずらしてください。

No. 4118 # ヘルプ 2005/03/05 (土) 12:21:11
質問はダメみたいですが、どうしてもできないので、誰か教えてください。。
http://x68000.q-e-d.net/~68user/net/pop3-1.html
を実際にやってみたんですが、
POP3サーバ名、ポート番号で、接続できました。
そして、USERも接続できたんですが、PASSだけが接続できません。
ちゃんと手順通り(パスは合ってる)にやっているんですが、、なぜでしょうか?
誰か教えてください。POP3サーバー名は、pop.mail.yahoo.co.jpです。
エラー内容は、-ERR invalid user/password
もう1個えらー内容がでました。
-ERR command valid only in authorization state.

No. 4119 # T.Kobayashi 2005/03/06 (日) 05:52:24
>>4118 ヘルプ
私は Yahoo! のメイルアカウントを持ってないので何ともですが、
http://help.yahoo.co.jp/help/jp/mail/pop/pop-03.html
を参考にしてありがちなミスを考えると、USER 名が小文字になってないとか。

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