CGI-BBS > CGI > C言語 > C言語にてFTP転送ファイルを完了チェックしたい。


カレッヂ
カレッヂ


質問者  投稿日 2/21(金) 09:32:38
ファイルがFTP転送に関する質問ですが、受信される時、
 受信ファイルを処理するタイミングに関したものです。
 FTPの送信側からは何の情報も得られません。(ファイルだけ)
 
 WINDOWS では読み書きモード("r+")でオープン成功
   だった場合受信完了として処理します。
 
 UNIX(Solaris)の場合、転送中のファイルでも
   オープンに成功してしまうんです。
   何か転送中と転送完了を区別することができるのが
   ないですか?
 
 今まで考えたのが、ファイルのstatを取得して
 一定の時間後またstatを取得し、
 変化がなかった(stat.st_sizeとかstat.st_ctimeなど)
 ファイルを転送完了ファイルだと考える。
 
 でも一定の時間が非常にややこしいので、
 この方法のほかに何かあったら教えてください。
 
 宜しくお願いします。
 
 サンプルソース
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <time.h>
 #include <fcntl.h>
 
 #define FILENAME  "./aaa.txt"
 void main(void){
     struct  stat  statbuf;
     FILE *stream;
     int  iRe;
 
     printf("START\n");
 
     if((stream = fopen(FILENAME, "r+")) != NULL)
 //  if((iRe = open(FILENAME, O_CREAT | O_EXCL)) == 0)
 //  if((iRe = open(FILENAME, O_RDWR)) == 0)
     {
 
         printf("OK open output file[%d].\n",iRe);
         stat(FILENAME, &statbuf);
         if (statbuf.st_mode & S_IREAD)
             printf("読み込み可能ファイル\n");
         else
             printf("読み込み不可ファイル\n");
 
         if (statbuf.st_mode & S_IWRITE)
             printf("書き込み可能ファイル\n");
         else
             printf("書き込み不可ファイル\n");
 
         printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
         printf("Size of file in bytes: %ld\n", statbuf.st_size);
         printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));
     } else {
         printf("Cannot open output file[%d].\n",iRe);
 
  上記と同一
 
         fclose(stream);
     }
 

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:(未選択)
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 やまだ  [削除]  投稿日 2/22(土) 07:40:30
(dataconnの戻り値)ファイルポインタの終わりEOFをチェックではどうですか。

返信(回答)する

 


Web裏技