From: Christiana B. <chr...@gm...> - 2007-09-17 12:29:46
|
Hi all, i would like to handle request to my FUSE based file system based on the nature of the caller. For instance, I would like to evaluate stat information in different ways, if the call comes from, let's say the find command or from ls or whatsoever. Right now I have no clue how I could achieve this. Any hints, advices etc. are very welcome. Thanks in advance (and thx to the devs for FUSE, i really like the concept), -chris -- GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail |
From: Luis F. <lui...@gm...> - 2007-09-17 15:03:46
|
Hello You can get the context with: static struct fuse_context *context; context =3D fuse_get_context(); Then context->pid has the pid of the caller. I don't know which function gives you the cmdline of the process given its pid. But if you don't find one, you can do something like: sprintf(cmdlinefile,"/proc/%d/cmdline",context->pid); fpid =3D fopen(cmdlinefile,"r"); fgets(processname, count, fpid); fclose(fpid); I did not tested it, neither used the context->pid, I just used context->uid and context->pid. So I THINK this should be the way, but I am not sure. Just try it. Best Regards Luis Otavio 2007/9/17, Christiana Baum <chr...@gm...>: > Hi all, > > i would like to handle request to my FUSE based > file system based on the nature of the caller. > > For instance, I would like to evaluate stat > information in different ways, if the call comes > from, let's say the find command or from ls or > whatsoever. > > Right now I have no clue how I could achieve this. > > Any hints, advices etc. are very welcome. > > Thanks in advance (and thx to the devs for FUSE, > i really like the concept), > -chris > > > -- > GMX FreeMail: 1 GB Postfach, 5 E-Mail-Adressen, 10 Free SMS. > Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2005. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > fuse-devel mailing list > fus...@li... > https://lists.sourceforge.net/lists/listinfo/fuse-devel > --=20 Luis Ot=E1vio de Colla Furquim N=E3o alimente os pingos Don't feed the tribbles http://www.furquim.org/chironfs/ |
From: Christiana B. <chr...@gm...> - 2007-09-18 10:23:02
|
Hi all, >> 2007/9/17, Christiana Baum <chr...@gm...>: >> i would like to handle request to my FUSE based >> file system based on the nature of the caller. > 2007/9/17, "Luis Furquim" <lui...@gm...>: > You can get the context with: > > static struct fuse_context *context; > context = fuse_get_context(); > > Then context->pid has the pid of the caller. I don't know > which function gives you the cmdline of the process > given its pid. But if you don't find one, you can do something > like: > > sprintf(cmdlinefile,"/proc/%d/cmdline",context->pid); > fpid = fopen(cmdlinefile,"r"); > fgets(processname, count, fpid); > fclose(fpid); Luis, that is quite a cool idea and works great. Now my solution looks like this: Let's say I want to offer the command 'myfind /foo' to the user and treat it special inside myfusefs. 1. Create 'myfind' as ----8<---- #!/bin/sh test -e $1; ---->8---- (the actual command does not matter, but should be inexpensive and trigger not to many .) 2. Now use your suggestion in myfuse_getattr(). (What we get there is a string like '/bin/sh ./myfind foo/bar' upon which to decide what action to take according to the caller.) This way I can do special things to existing commands or even pass 'special' commands to the file system. However, I wonder if this is a good solution or if there are better ways to achieve such behaviour. What do you think, is it [ ] a clever way [ ] completely mindboggling [ ] if it works, why not? Any suggestions and comments are very welcome, -chris -- Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten Browser-Versionen downloaden: http://www.gmx.net/de/go/browser |