我試圖創建5000個垃圾文件,將它們寫入文件並刪除它們。但是這段代碼只是將一部分文件寫入文件。 ls -l | grep^- | wc -l表示我有1598個文件保留在應該用unlink();清空的目錄中。如果我刪除關閉(fd),如果我執行超過1000個文件,則會發生seg故障。有什麼建議麼?試圖閱讀目錄的文件並將其寫入列表
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
main (int argv, char *args[]){
if(argv<3){
printf("Please run with proper command line arguements.\n");
return;
}
int numFiles = atoi(args[1]);
char *fileName = args[2];
char *fileList[numFiles];
int x, ret,fd;
char buff[50];
for(x=0;x<numFiles;x++){
ret = sprintf(buff,"./stuff/%s-%d.junk",fileName, x);
fd = creat(buff);
close(fd);
}
DIR *odir = opendir("./stuff");
struct dirent *rdir = NULL;
FILE *fp;
fp = fopen("./files.list", "w");
x=0;
while(rdir = readdir(odir)){
char* name = rdir->d_name;
ret = sprintf(buff,"./stuff/%s-%d.junk",fileName, x);
if(strcmp(name,"..")!=0){
if(strcmp(name,".")!=0){
fprintf(fp,"%s %d\n",name,x);
x++;
}
}
unlink(buff);
}
close(fp);
closedir(odir);
}
謝謝!
注意:分配需要使用creat(),opendir(),readdir()和unlink()。至於錯誤檢查,當然,你的權利,但我在時間限制和電訊局長真的,真的不在乎......但謝謝大家!
添加錯誤檢查,當返回錯誤時使用perror,然後返回更多有關失敗的信息,如果無法自行排除它爲什麼失敗。 – AProgrammer 2011-04-13 16:06:41
不幸的是,我被分配使用creat(),opendir(),readdir()和unlink()。我喜歡被教導折舊的功能!現在我已經將unlink(buff)更改爲sprintf(buff,「./stuff/%s",name);取消鏈接(buff),一切正常。感謝您的幫助和建議! – Josh 2011-04-13 16:21:01
檢查這些函數的結果,以確保它們的行爲正確,然後使用錯誤,如果它們沒有。 – AProgrammer 2011-04-13 16:25:41