Date: Mon, 26 Mar 2012 10:14:30 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-drivers@freebsd.org Cc: Yong Fan <yong.fan@exar.com>, "drivers@FreeBSD.org" <drivers@freebsd.org> Subject: Re: operate file in kernel space Message-ID: <201203261014.30542.jhb@freebsd.org> In-Reply-To: <88AB8EB2D3F1D249AE07FAFFF17A396F0384CEFB5B@HZU1EXCH02.hq.exar.com> References: <88AB8EB2D3F1D249AE07FAFFF17A396F0384CEFB5B@HZU1EXCH02.hq.exar.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday, March 25, 2012 10:41:09 pm Yong Fan wrote: > Hi all, > > I want to operate file in kernel space. > At present, I have found the following kernel routines, which operate file: > Kern_open(), kern_close(), kern_readv() and kern_writev(). > Now, I have some doubt about these routines? > 1 kern_open() doesn't return a file handle or file pointer? > As we know, filp_open(), which is a Linux kernel routine, returns a file pointer. > ZwCreateFile(), which is a Windows kernel routine, returns a file handle. > > 2 how can I "seek" a file in kernel space? > The function of "seek" routine is similar with generic_file_llseek()(Linux) or ZwSetInformationFile()(windows). file descriptors in FreeBSD are generally tied to a file descriptor table (so a process). What you can do is locate a vnode directly (e.g. using namei() to do a pathname lookup) and then use vn_rdwr() to access the data in the file. vn_rdwr() accepts a uio and you would manage your own "seek" location and that gets set in the uio_offset of the uio you pass to vn_rdwr(). -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203261014.30542.jhb>