On Sun, 5 Mar 2006, Anupam Deshpande wrote:

I have used open system call in KLD to create a file. But after inserting the module the file is not created though the file descriptor returned is non zero. I also used close system call to close the file, using the descriptor returned by open system call.
        I called the following function from my module:

int f_open(void)
{
  struct open_args o;
  struct close_args c;
  struct thread *td = curthread;
  int fd;
  o.path = "/home/file1.c";

There are a couple of things going on here:

- open() accepts a pointer to a pathname in user address space.  If this code
  is running in kernel, then the above string is in the kernel address space.
  You probably want to look at kern_open(), which accepts a path pointer and
  also an address space identifier, which can be set to UIO_SYSSPACE to
  indicate that the path argument is being copied from a kernel address.

- In kernel, system calls return (0) for success, or an error value, not a
  file descriptor number.  This is placed in the thread context return values
  to be returned to user space.  Specifically, in td->td_retval[0].  So you're
  not checking to make sure the call succeeded, and you're also not getting
  the file descriptor from the right place.  You'll probably find that the
  value you're getting back is EFAULT, indicating that the path pointer was
  not valid for a user process.

Robert N M Watson

  o.flags = O_CREAT | O_RDWR | O_APPEND;
  o.mode = 777;
  fd = open(td,&a);
  printf("\nFile descriptor  = %d",fd);
  c.fd = fd;
  close(td,&c);
}


        Can anyone help me in this regard?

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

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

Reply via email to