Date: Tue, 3 Jul 2007 19:23:07 +0000 From: "Eren Erdemli" <erenerdemli@gmail.com> To: "=?ISO-8859-1?Q?Dag-Erling_Sm=F8rgrav?=" <des@des.no> Cc: freebsd-current@freebsd.org Subject: Re: getcwd in kernel space Message-ID: <cd4105970707031223i5beac49ye8bd707a4e7526f4@mail.gmail.com> In-Reply-To: <86sl86bwa5.fsf@dwp.des.no> References: <cd4105970706300902m5f7e0432y312335b0db5138bd@mail.gmail.com> <86sl86bwa5.fsf@dwp.des.no>
next in thread | previous in thread | raw e-mail | index | archive | help
Hello I am not actually replacing the mkdir instead I am trying to get the change= s happened in directories such as FAM(Fiile Alteration Monitor), so you are right about the of the parent directory in which case it will be cwd. I have tried vn_fullpath() however it is not as reliable as it needs to be since once an rmdir command executes on the folder vn_fullpath() returns ENOTDIR. So will a namei lookup get me the path name of the parent. Basically I wil= l need to perform this in open, link unlink also. My understanding is that namei lookup will return = a vnode am I wrong ??? Thanks On 7/2/07, Dag-Erling Sm=F8rgrav <des@des.no> wrote: > > "Eren Erdemli" <erenerdemli@gmail.com> writes: > > I am new to freebsd programing and I am trying to get the current > > working directory of the curthread. > > curthread->td_proc->p_fd->fd_cdir is a pointer to the directory's vnode. > > > I have hook on to the sys calls and redirected the mkdir > > > > my_mkdir(struct thread *p, (void*) uap) > > { > > mkdir_args =3D ..................... > > ........ > > getCWD()??????????? > > } > > > > the given path in the args is relative to the current path if not > supplied > > fully. So who would I get the path of file. > > Are you sure you need the path? There is no unique mapping from vnode > to path in FreeBSD (or in any Unix derivative for that matter); multiple > paths can lead to the same vnode. The kernel operates on vnodes, not > paths (except for namei, which translates paths to vnodes) and the path > to a vnode may change after a reference to the vnode is acquired (there > is no prohibition against deleting, renaming or moving an open file or > directory). Path components are cached in the namei cache, so it may > sometimes be possible to reconstruct the path by which a particular > vnode was most recently reached (vn_fullpath() does this), but the > information may also have been displaced from the cache since the last > lookup. > > If you just need a reference to the specified path or its parent > directory, a namei lookup of the path will do all the work for you. See > for instance kern_mkdir() in vfs_syscalls.c (which I assume you are > already looking at, since you are writing a replacement for the mkdir(2) > syscall) > > DES > -- > Dag-Erling Sm=F8rgrav - des@des.no >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?cd4105970707031223i5beac49ye8bd707a4e7526f4>