這是列出FTP的CMD的一個片段:Ç的sendfile不工作的第二次
count = file_list("./", &files);
if((fp_list = fopen("listfiles.txt", "w")) == NULL){
perror("Impossibile aprire il file per la scrittura LIST");
onexit(newsockd, sockd, 0, 2);
}
for(i=0; i < count; i++){
if(strcmp(files[i], "DIR ..") == 0 || strcmp(files[i], "DIR .") == 0) continue;
else{
fprintf(fp_list, "%s\n", files[i]);
}
}
fclose(fp_list);
if((fpl = open("listfiles.txt", O_RDONLY)) < 0){
perror("open file with open");
onexit(newsockd, sockd, 0, 2);
exit(1);
}
if(fstat(fpl, &fileStat) < 0){
perror("Errore fstat");
onexit(newsockd, sockd, fpl, 3);
}
fsize = fileStat.st_size;
if(send(newsockd, &fsize, sizeof(fsize), 0) < 0){
perror("Errore durante l'invio grande file list");
onexit(newsockd, sockd, fpl, 3);
}
rc_list = sendfile(newsockd, fpl, &offset_list, fileStat.st_size);
if(rc_list == -1){
perror("Invio file list non riuscito");
onexit(newsockd, sockd, fpl, 3);
}
if((uint32_t)rc_list != fsize){
fprintf(stderr, "Error: transfer incomplete: %d di %d bytes inviati\n", rc_list, (int)fileStat.st_size);
onexit(newsockd, sockd, fpl, 3);
}
printf("OK\n");
close(fpl);
if(remove("listfiles.txt") == -1){
perror("errore cancellazione file");
onexit(newsockd, sockd, 0, 2);
}
wher &files
被聲明爲char **files
和功能list_files
是我寫的一個功能不相關爲我的問題。
我的問題:首次LIST CMD這就是所謂的它工作正常,但如果我叫列表中的其他時間也總是給我「的錯誤,不完備轉移」我不明白爲什麼...
從您在問題中發佈的代碼中看到「錯誤,轉移不完整」消息嗎?在那種情況下呢?否則,問題報告中的代碼是什麼? – 2012-08-08 08:02:31
是的,這是我發佈到問題:)當sendfile函數不發送所有文件時,它給我一個錯誤... – polslinux 2012-08-08 08:38:56
什麼是'offset_list'和你如何初始化它?請記住,如果'sendfile'不能發送所有內容,那麼它將返回一個大於請求大小的值,並且您將不得不調整大小並再次嘗試。 – 2012-08-08 08:45:58