![]() |
カレッヂ |
質問者 金
投稿日 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裏技 |