On Feb 26, 2005, at 11:25 pm, Stroller wrote: > C was the language I thought to do this in. Thanks for this code - I > didn't get past the thinking-about-it stage because I've never done > any file handling in C before (in my defence, I did complete a > compiler project with C in uni). > > $ ./godir > . 1041563 > .. 224420 > godir 1041568 > godir.c 1041561 > $ ./godir /Volumes/CLEARLIGHT/foo/legoland > . 731381 > .. 772975 > eÌ•yÌ√yÌ√yÌ√vkâ∆•â∆•..â∆•â∆• 169384 > > ...With the benefit of Mr Tilliard's code, I'm gonna have a crack at > writing something to unlink $1. Bah! I spent ages (IE: the last 3 hours) at this - far too long making it pretty & doing error checking & stuff. See the attached. Still no joy. Grrrr! $ ls /Volumes/CLEARLIGHT/foo/legoland e??y??y??y??vk??????..?????? $ ./godir !!:$ ./godir /Volumes/CLEARLIGHT/foo/legoland . 731381 .. 772975 eÌyÌyÌyÌvkââ..ââ 169384 $ ./delinode 169384 Usage: ./delinode <inode number> <containing directory> $ ./delinode 169384 !-2:$ ./delinode 169384 /Volumes/CLEARLIGHT/foo/legoland Looking for inode 169384 in directory /Volumes/CLEARLIGHT/foo/legoland eÌyÌyÌyÌvkââ..ââ is the name of the file referred to by inode 169384Failed to remove it :( $ ls /Volumes/CLEARLIGHT/foo/legoland e??y??y??y??vk??????..?????? $ ./delinode 169384 /Volumes/CLEARLIGHT/foo/legoland Looking for inode 169384 in directory /Volumes/CLEARLIGHT/foo/legoland eÌyÌyÌyÌvkââ..ââ is the name of the file referred to by inode 169384Failed to remove it :( $ Any suggestions, anyone? if this wasn't a Useful Academic Exercise (tm) I'd just back-up my data & format the damn thing. Stroller. -------------- next part -------------- #include <stdio.h> #include <dirent.h> static int usage (char *myname) { // TODO: See K&R 7.6 re STDERR printf ("Usage: %s <inode number> <containing directory>\n", myname); } static int doDirectory (char *name, int inode) { struct dirent *dir; DIR *dirp; int return_value = 1; // Check to see if directory exists if ((dirp = opendir (name)) == (DIR *) 0L) { perror (name); return (-1); } // Navigate thro' directory looking for inode prey while (dir = readdir (dirp)) { if (dir->d_ino == inode) { printf ("%s is the name of the file referred to by inode %d\n", dir->d_name, inode); return_value = (remove (dir->d_name)); } } closedir (dirp); return (return_value); } int main (int argc, char **argv) { int inode; if ((argc != 3) || !(inode = atoi (argv[1]))) { usage (argv[0]); return (1); } printf ("Looking for inode %d in directory %s\n", inode, argv[2]); if (doDirectory (argv[2], inode)) { printf ("Failed to remove it :(\n"); return 1; } else printf ("Inode removed sucessfully :D\n"); return (0); }