/******************************************************************************\ * inc - 31-08-2001 - http://www.incubus.co.uk * Check if a given file exists- and if it can be opened for read/write access * cc checkfile -o checkfile - then - ./checkfile \******************************************************************************/ #include #include #include #include #include void getDirName (char *path, char *dir); int main (int argc, char *argv[]) { char file_exist=0; char dirname[256]; char buffer[256]; DIR *dir_ptr; struct dirent *dirent_ptr; FILE *f_ptr; if (--argc) { getDirName(argv[1],dirname); if((dir_ptr = opendir(dirname))) { while((dirent_ptr = readdir(dir_ptr))) if(strcmp(dirent_ptr->d_name, basename(argv[1]))==0) file_exist=1; closedir(dir_ptr); } if (file_exist) { printf("File Exists = OK\n"); sprintf(buffer, "%s/%s", dirname, basename(argv[1])); if( (f_ptr = fopen( buffer, "r")) != 0) { fprintf(stdout,"File Open READ = OK\n"); fclose(f_ptr); if( (f_ptr = fopen( buffer, "w")) != 0) { fprintf(stdout,"File Open WRITE = OK\n"); fclose(f_ptr); }else fprintf(stdout,"File Open WRITE = FAIL\n"); }else fprintf(stdout,"File Open READ = FAIL\n"); }else printf("File Exists = FAIL\n"); }else fprintf(stderr,"Missing argument - checkfile dir/filename \n"); return 0; } void getDirName (char *path, char *dir) { int count; int len; if (!strcmp(basename(path),path)) strcpy(dir, "./"); else { len = strlen(path) - strlen(basename(path)); for (count = 0; count < len; count++) dir[count] = path[count]; dir[count-1] = '\0'; } return; }