![]() |
| カレッヂ |
質問者 金
投稿日 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);
}
プロバイダ参照: |
回答者 やまだ
[削除]
投稿日 2/22(土) 07:40:30
(dataconnの戻り値)ファイルポインタの終わりEOFをチェックではどうですか。 |
返信(回答)する
| Web裏技 |