FTP ダウンロードの中断
Linux-2.6.18-at9 Debianです。
一度受信を開始してしまったFTP転送を中断、再開はできるのでしょうか?。
状況:
タスク1.ハードウエアへのデータバースト転送(ioctlによる) : 約5msec
タスク2.Host PCへのステータス転送(PC側がClientのTCP/IP) :約2msec
タスク3.PCから大量データをファイルの形で受信するタスク(FTP Client) :残り
が基本タスクとなるシステムがあります。これがWhile文でLoopしており、約50msecに1回タスク1,2が実行されなければなりません。
FTP Client機能によるファイル受信は50msecのloop時間よりははるかに長く設定されています。
そこでタスク1の実行を阻害しないことを期待してFTP受信タスクを別スレッドにしました。しかし別スレッドではあっても一度始まってしまったファイル受信は中断はできないらしく明らかにタスク1の実行は影響を受けています。
次に別スレッドではなくこれを別のProcessにしました。しかし結果は多少は改善しましたが基本的には同じです。
ファイル受信processの要旨は以下のごとくです:
while(1){
errno = 0;
if(msgrcv(msqid, &message, BUFSIZ, read_type, 0) == -1){
perror("msgrcv failure");
break;
}
if (inhbit){
if (filexchg){
system("msh fileRcv.sh file.1"); // msh : bash機能のshell fileRcv.sh : Shell Script
else
system("msh fileRcv.sh file.2");
}
}
二つのファイルを親processの指令とタイミングで交互にダウンロードします。
ftpクライアントの起動にはshellを使っています。
タスク1の実行サイクルが回ってきたら、親がinhibitを発行、FTP受信を中断してもらいたいのですが、bashという別のprocessにコントロールを渡しているのですから、本質的に不可能なことをしているように思います。
仮にFTPのフロー制御ができても再開したときFTP転送の障害が発生する懸念もあります。
親、子間の優先順位をいじることで親のタスクを無条件に優先させる設定ができても親にはIldeループもあり子からみた識別はできません。
タスク1の割り込み化も試みたのですが、実現できませんでした。
何か解決策があればお願いいたします。
TCP/IPにすればパケット単位のフロー制御ができることはわかっているのですが、転送速度が問題になります。
お礼
試してみました。 若干、不安定ではあるものの、 とりあえず目的は達成できそうです。 ありがとうございました。 作者様にも感謝。