On Thu, 3 Jul 2008, Uladzislau Rezki wrote:

I've been writing a small kernel module, that provides information about modification of the filesystem to user_land/userspace through the character device. I'm using FreeBSD 4.10

So, my question is: Is there any way to get file name knowing its descriptor?

Later versions of FreeBSD include a generic routine, vn_fullpath(9), to convert a vnode reference into a pathname. It's not a particularly reliable routine, in that it depends on the name cache, but it does work in most cases. FreeBSD 4.x includes textvp_fullpath(9), which became the foundation for that routine in later versions; it generates the path to the vnode used for the text of a process, but could easily be generalized in much the same way vn_fullpath(9) has been to return the pathname for arbitrary vnodes. Be aware that pathnames are very much ephemeral in the UNIX design -- vnodes can and do have one name, no names, or many names, and generating a name for an arbitrary node wasn't part of the design requirements, so is quite difficult to do; likewise, not all file systems use the name cache well or at all. If this is just for debugging purposes, vn_fullpath(9) will do the trick, though, much of the time.

Robert N M Watson
Computer Laboratory
University of Cambridge


static int
xxx_write (struct proc *p, struct write_args *uap)
{
      struct vnode *vn;
      struct file *file;
      int sys_error;

      /* do system call */
      sys_error = write(p, uap);
      if (sys_error != 0)
              goto leave_call;

      /* get the file */
      file = curproc->p_fd->fd_ofiles[uap->fd];
      /* get the vnode */
      vn = (struct vnode *) file->f_data;

      /* do we have a regular */
      if (vn->v_type == VREG) {
      ...
      ...
      ...
}

As you can see we just know uap->fd.

Thanks.

--
Uladzislau Rezki
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to