Brad Dickerson wrote:
Hello,
I am trying to call the open function from within a kernel module.
After searching the web, I tried the following snippet:
mm_segment_t old_fs;
old_fs=get_fs();
set_fs(USER_DS);
fp=open('/etc/config.txt',O_RDONLY);
getLine(fp,line);
close(fp);
set_fs(old_fs);
For some reason, the open fails and returns -1. Any ideas on what I am doing wrong? This is all really new to me.
thanks,
Brad
hi there, please modify it for your use .
kopen (const char *filename, int flags) /* user defined function for opening a file from within kernel space */
{
oldmm = get_fs ();
set_fs (get_ds ());
kfd = sys_open (filename, flags | O_CREAT, S_IRWXU); /* create one if one doesnt exist */
set_fs (oldmm);
return kfd;
}
note that you would have get and set again if you want to read/write to the file .
/* returns number of bytes read or corresponding error code
* in case of failure
* see the man pages for more "man 2 read" */
int kread (int fd, char *buffer, int size) { int red;
oldmm = get_fs (); set_fs (get_ds ()); red = sys_read (fd, buffer, size); set_fs (oldmm); return red; }
/* returns number of bytes written or corresponding error code
* in case of failure
* see the man pages for more "man 2 write" */
int kwrite (int fd, char *buffer, int size) { int red;
oldmm = get_fs (); set_fs (get_ds ()); red = sys_write (fd, buffer, size); set_fs (oldmm); return red; }
hope this helps . cheers, Amith.
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/