|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/8843adae6ad5.html, оценка из 5, голосов 10
|