How to write over 2000,000 number of files in SDCARD on Linux.
I am developing a program on Fedora 9. This program write over 2000,000 number of files to SDCARD. Here is this program code.
int vnCount = 0;
int vnDirCount = 0;
int vnSubDirCount = 0;
int vnTotalCounts = 3600;
int vnTotalSubDirs = 8;
int vnTotalDirs = 1;
int vnWriteNum;
char vstrTmp[256];
memset(&vstrTmp[0], 0x00, sizeof(vstrTmp));
FILE *pfd;
while (vnDirCount < vnTotalDirs) {
memset(&vDstDirName[0], 0x00, sizeof(vDstDirName));
sprintf( &vDstDirName[0], "/media/SD/log/%08d", vnDirCount);
printf("<<< output dir: %s\n", &vDstDirName[0]);
if( mkdir( vDstDirName, 0x644 ) < 0 ) {
printf(">>> output dir: error 0 : %s\n", vDstDirName);
return -1;
}
usleep(1000*10);
vnSubDirCount = 0;
while(vnSubDirCount < vnTotalSubDirs) {
memset(&vSubDirName[0], 0x00, sizeof(vSubDirName));
sprintf(&vSubDirName[0], "%s/%02d", &vDstDirName[0], vnSubDirCount);
printf("??? output dir: %s\n", &vSubDirName[0]);
if( mkdir( vSubDirName, 0x777 ) < 0 ) {
printf("/// output dir: error : %s\n", vSubDirName);
return -1;
}
vnCount = 0;
while(vnCount < vnTotalCounts) {
memset(&vstrTmp[0], 0x00, sizeof(vstrTmp));
sprintf(&vstrTmp[0], "%s/%08d%06d.dat", &vSubDirName[0], vnCount);
printf("*** output file: %s\n", &vstrTmp[0]);
if ((pfd = fopen(&vstrTmp[0], "w")) == NULL)
{
printf(" @@@ Cannot open output file \n");
return 1;
}
memset(&buf[0], 0xaa, sizeof(buf));
printf("output file:1 \n");
vnWriteNum = fwrite(&buf[0], sizeof(buf), 1, pfd);
//ret = write(pfd, &buf[0], sizeof(buf));
printf("output file:2 \n");
if (vnWriteNum != 1) {
fclose(pfd);
printf(" $$$ Cannot write output file \n");
return 1;
}
if (fflush(pfd) != 0) {
printf(" ^^^ Cannot flush output file \n");
}
if (fsync(fileno(pfd)) != 0) {
printf(" ^^^ Cannot flush output file \n");
}
printf("output file:3 \n");
if (fclose(pfd) != 0) {
printf(" ### Cannot close output file \n");
}
usleep(1000*1);
vnCount = vnCount +1;
}
vnSubDirCount = vnSubDirCount + 1;
}
vnDirCount = vnDirCount + 1;
}
The program is write successful until 2000000 number of files. But I can't see over 23000 number of files in SDCARD on Linux konqueror. Only can see 23000 number of files. At konsole is too same. So I do check the SDCARD by "fsck.vfat" linux command. Here is the command result.
fsck.vfat /dev/sdd1
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
Orphaned long file name part "00000000000746.dat"
1: Delete.
2: Leave it.
? 1
Reclaimed 7658 unused clusters (31367168 bytes).
Free cluster summary wrong (479444 vs. really 487102)
1) Correct
2) Don't correct
How to write over 23000 number of file on SDCARD.
Each file's size is 3.5K. SDCARD's capacity is 2G. This SDCARD was format to FAT32(allocation unit 4K) on Windows. Linux system is Fedora 9. Can anyone help me. Thanks.