68user's page 掲示板

Prev< No. 3139〜3147> Next  [最新発言に戻る] [過去ログ一覧]
No. 3139 # 金床 [URL] [E-mail] 2003/03/17 (月) 23:24:58
>>3135 koko
ソケットのクローズはどのAPIを使って(どんなソースコードで)行ってらっしゃいますか?
Winsockだと、shutdownを使わずにclosesocketを呼ぶとRSTフラグのセットされたパケットが飛ぶことが
あるような覚えがあります。

いずれにせよ、パケットキャプチャしてみると原因に近づけると思います。

No. 3140 # koko 2003/03/18 (火) 11:17:29
>>3139 金床
パケットをキャプチャしてみたところ、サーバからクライアントにRSTフラグのセットされたパケットは飛んでいました。

試したケースを整理します。
(1)accept直後にクライアントからの送信データをreadせずに、サーバ側から
write、closeすると、クライアントではサーバがwriteしたデータを受信できません。
(2)accept直後にクライアントからの送信データを1バイトでも良いのでreadし、サーバ側からwrite、closeすると、クライアントではサーバがwriteしたデータを受信できます。

(2)では、RSTフラグのセットされたパケットが飛ぶ前に、FIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでおり、(1)ではFIN ACKがセットされたパケットとクライアントで受信させたいパケットが飛んでいません。

サーバ側でクライアントの送信電文を1バイト読む事で動きが変わるようなのですが、この辺が何か関係があるのかもしれません。

ちなみに、APIは以下の通りです。
サーバ(UNIX):socket,bind,listen,accept,select,read,write,close
クライアント(WIN):socket,bind,connect,listen,recv,send,closesocket

サーバ側でのソケットのクローズは、acceptの戻り値を引数にしてcloseをしているのみで、shutdownはしていません。

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

No. 3141 # 68user 2003/03/18 (火) 21:02:38
>>3138 ajmj
> FileHandle.pmを使って無名のファイルハンドラを作って、
> そこにCSVを入れて、$FTP->put(FILEHANDLA)でアップさせる
というのが実現可能なのかどうかはわかりませんが (できない
ような気がする)、別解としては

    1. put じゃなくて stor("ファイル名") を呼ぶと、Net::FTP::dataconn
          オブジェクトが返ってくるので、それに対して write する。

    2. POSIX::mkfifo で名前付きパイプを作り、fork して、
          子が CSV データを作成、名前付きパイプに書き込む。
          親は Net::FTP::put に名前付きパイプを渡す。

あたりですかね。1 は perldoc Net::FTP を流し読んだだけで、
できるかどうかわかりません。2 は試していませんが、一応実現は
できるでしょう。

>>3140 koko
    http://www.kt.rim.or.jp/~ksk/wskfaq-ja/newbie.html#howclose
ですかね?

あと、情報を小出しにせず、最小限まで削ったソースコードを最初に
載せれば、話が早そうなのになぁと思ったりします。

まぁわたしは Winsock 知らないのでアレですが。

No. 3142 # kaki 2003/03/18 (火) 23:00:14
はじめまして、お世話になります。
kakiと申します。

現在、Linux(Redhat7.1 kernel2.4.2-2)、C言語にて
プログラムの作成をしております。

質問なのですが、プログラム上(C言語)からFD、CFなどのデバイスに
マウントし、FD、CF内のファイルを取得するということは
可能なのでしょうか?

お分かりになる方がおられましたら、ご教授お願いいたします。

No. 3143 # 金床 [URL] [E-mail] 2003/03/18 (火) 23:49:33
>>3140 koko
やっぱりRSTによる「異常終了」が原因のようですね。
shutdown()を使ってみると幸せになれると思います。

No. 3144 # 68user 2003/03/19 (水) 02:04:16
>>3142 kaki
mount(2) をどうぞ。あるいは DOS フォーマットならば mtools の
mtype あたりがお手軽かも。

ところで CF って何ですか? コンパクトフラッシュ?

No. 3145 # kaki 2003/03/19 (水) 09:12:15
>>3144 68user
ご回答ありがとうございます。

mountはコンソール上でのやり方は知っているのですが、
gccでコンパイルしたプログラムからも、
使えるということなのでしょうか?
また、コンソールで使えるコマンド(# mountや# cdなど)を
Cプログラムで使用するにはどのようにするのでしょうか?

実際、やりたいことはプログラムを起動したら、
FD、CF(コンパクトフラッシュ)にマウントし、
ファイルがあればディレクトリにコピーするといったことです。

参考になるサイトや文献などご存知でしたら、
教えてください。
よろしくお願いします。

No. 3146 # FF 2003/03/19 (水) 13:25:20
端末の入出力について質問です。

cronで実行されたシェルの出力を端末に出力したり、
端末からの入力を受けたりしたいのですが、どのよう
にすればよいのでしょうか?
次のようなやり方ではダメでした。
#ファイル名 a.sh
#!/bin/ksh
while [ : ]
do
        read INPUT?'?'
        if [[ $INPUT = 'q' ]]; then
                exit
        fi
done
#スクリプト終了
% a.sh < /dev/pts/13 > /dev/pts/13 2&>1

どなたか教えてください。よろしくお願いします。

No. 3147 # 68user 2003/03/19 (水) 13:51:15
>>3145 kaki
> mountはコンソール上でのやり方は知っているのですが、
> gccでコンパイルしたプログラムからも、
> 使えるということなのでしょうか?
mount(1) は内部で mount(2) を呼んでいるだけなので、自分で
mount(2) を呼んでやればよいわけです。

mount(1) のマニュアル http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html
mount(2) のマニュアル http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mount.2.html
セクションとは? http://www.linux.or.jp/JM/section.html

> また、コンソールで使えるコマンド(# mountや# cdなど)を
> Cプログラムで使用するにはどのようにするのでしょうか?
system(3) を使います。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man3/system.3.html

なお、cd は海より深い理由により、system(3) からは使えません。
chdir(2) を自分で発行してください。
    http://www.linux.or.jp/JM/html/LDP_man-pages/man2/chdir.2.html

>>3146 FF
> cronで実行されたシェルの出力を端末に出力したり、
> 端末からの入力を受けたりしたいのですが、
おそらく「端末」という用語を誤解されていると思いますが、cron から
実行した場合は端末は割り当てられないので、それは不可能です。

で、あなたが本当は何をしたいかという話になるわけですが、コンソール
(マシンにつながっているモニタ) に文字列を出したいんですか?

あるいはファイルにあらかじめ入力文字列を書いておいて、ファイルに
出力したいんですか?

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