関数 | |
static void | cleanup (void) |
static void | create_files () |
static int | os2_delete (DIR *d) |
int | main (void) |
static void cleanup | ( | void | ) | [static] |
os2_delete.c の 28 行で定義されています。
00029 { 00030 /* I'm a lazy bastard */ 00031 system("rm -rf " TESTDIR); 00032 mkdir(TESTDIR, 0700) == 0 || FAILED("mkdir"); 00033 }
static void create_files | ( | void | ) | [static] |
os2_delete.c の 35 行で定義されています。
参照先 sprintf().
00036 { 00037 int i; 00038 for (i=0;i<NUM_FILES;i++) { 00039 char fname[40]; 00040 sprintf(fname, TESTDIR "/test%u.txt", i); 00041 close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close"); 00042 } 00043 }
static int os2_delete | ( | DIR * | d | ) | [static] |
os2_delete.c の 45 行で定義されています。
参照先 readdir()・seekdir()・sprintf()・telldir().
00046 { 00047 off_t offsets[READDIR_SIZE]; 00048 int i, j; 00049 struct dirent *de; 00050 char names[READDIR_SIZE][30]; 00051 00052 /* scan, remembering offsets */ 00053 for (i=0, de=readdir(d); 00054 de && i < READDIR_SIZE; 00055 de=readdir(d), i++) { 00056 offsets[i] = telldir(d); 00057 strcpy(names[i], de->d_name); 00058 } 00059 00060 if (i == 0) { 00061 return 0; 00062 } 00063 00064 /* delete the first few */ 00065 for (j=0; j<MIN(i, DELETE_SIZE); j++) { 00066 char fname[40]; 00067 sprintf(fname, TESTDIR "/%s", names[j]); 00068 unlink(fname) == 0 || FAILED("unlink"); 00069 } 00070 00071 /* seek to just after the deletion */ 00072 seekdir(d, offsets[j-1]); 00073 00074 /* return number deleted */ 00075 return j; 00076 }
int main | ( | void | ) |
os2_delete.c の 78 行で定義されています。
参照先 cleanup()・closedir()・create_files()・opendir()・os2_delete()・printf()・readdir()・total_deleted.
00079 { 00080 int total_deleted = 0; 00081 DIR *d; 00082 struct dirent *de; 00083 00084 cleanup(); 00085 create_files(); 00086 00087 d = opendir(TESTDIR); 00088 00089 /* skip past . and .. */ 00090 de = readdir(d); 00091 strcmp(de->d_name, ".") == 0 || FAILED("match ."); 00092 de = readdir(d); 00093 strcmp(de->d_name, "..") == 0 || FAILED("match .."); 00094 00095 while (1) { 00096 int n = os2_delete(d); 00097 if (n == 0) break; 00098 total_deleted += n; 00099 } 00100 closedir(d); 00101 00102 printf("Deleted %d files of %d\n", total_deleted, NUM_FILES); 00103 00104 rmdir(TESTDIR) == 0 || FAILED("rmdir"); 00105 00106 return 0; 00107 }