Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Dmitry Fedorov                       2:5020/400     10 Jun 2001  10:37:37
 To : Eugeni Dodonov
 Subject : Re: kernel sockets
 -------------------------------------------------------------------------------- 
 
 >>Eugeni Dodonov wrote:
 >>>
 >>>Hе знает ли кто-нибудь как работать с сокетами в кернеле? В ядре есть функция
 >>>sys_socket(), которая экивалентна glibc'овскому socket(), но эта
 >>>функция заботает только из самого ядра, из модуля ее использовать
 >>>невозможно (насколько я понял). Мне же необходимо использовать ее
 >>>именно из модуля...
 >>
 >>Для вызова системного вызова из модуля на примере sys_write:
 >>
 >Проблемма в том, чьл в asm/unistd.h sys_socket не указан :(
 
 __NR_socketcall
 
 Смотри sys_socketcall() в net/socket.c.
 
 А также sock_create() и другие (sock_sendmsg, например),
 которые экспортируются для модулей, может удасться обойтись без извращений
 c вызовом system calls из ядра.
 >Я попробывал сделать вызов через sys_call_table для sys_open() а потом
 >sys_write (чтобы просто записать что-нибудь в какой-нибудь файл) - не
 >вышло - выдает EACCES (говорит, что не может достучаться до файла вне
 >address space :(... Можно ли как нибудь это поправить? Тестировалось
 >с /tmp/test, /dev/test, /test, test...
 
 У меня работает. Ты, наверное, что-нибудь упустил.
 
 #include <linux/df/sys_open.h>
 #include <linux/df/sys_write.h>
 
 [.....................]
 
     {
   static const char name[] = "/tmp/fedorov";
   ssize_t fd, rc;
   mm_segment_t old_fs = get_fs(); set_fs(KERNEL_DS);
 
   fd = sys_open(name, O_CREAT|O_TRUNC|O_WRONLY, S_IRUGO|S_IWUGO);
   printk("sys_open( '%s' ) == %d\n", name, fd);
 
   if (fd>=0)
   {
       static const char buf[] = "teeeeest\n";
 
       rc = sys_write(fd, buf, sizeof(buf)-1);
       printk("sys_write() == %d\n", rc);
       sys_close(fd);
   }
 
   set_fs(old_fs);
     }
 
 [.....................]
 -- 
 Eсли уж гайка есть, она должна быть затянута до конца.
 --- ifmail v.2.15dev5
  * Origin: INP (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 kernel sockets   Eugeni Dodonov   09 Jun 2001 03:05:33 
 Re: kernel sockets   Dmitry Fedorov   09 Jun 2001 09:09:14 
 Re: kernel sockets   Eugeni Dodonov   09 Jun 2001 22:06:20 
 Re: kernel sockets   Dmitry Fedorov   10 Jun 2001 10:37:37 
 Re: kernel sockets   Eugeni Dodonov   10 Jun 2001 21:35:59 
 Re: kernel sockets   Dmitry Fedorov   11 Jun 2001 07:38:28 
 Re: kernel sockets   Eugeni Dodonov   11 Jun 2001 15:03:01 
 Re: kernel sockets   Dmitry Fedorov   11 Jun 2001 17:08:26 
Архивное /ru.linux/8843adae6ad5.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional