The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 6.2 Пример функции-заглушки пользовательского пространства

Распечатка 6.2 Пример функции-заглушки пользовательского пространства

Предыдущая  Содержание  Следующая V*D*V

Распечатка 6.2

 

/* kapi-user.c */

 

#include <fcntl.h>

#include "kapi.h"

 

/* Дескриптор файла для “/dev/kapi” */

int dev_fd;

 

#define MAX_SIZE 50

 

int my_kernel_func(int val, char* in_str, char *out_str){

 

  kfunc_t data;

  int ret_val;

 

  /* Общее число аргументов - три */

  data.num = 3;

 

  /*

   * Аргумент 1.

   * Даже аргументы-не указатели должны быть переданы как указатели.

   * Направлением для таких аргументов является DIR_IN

   */

  data.arg[0].val = (void *)&val;

  data.arg[0].size = sizeof(int);

  data.arg[0].dir = DIR_IN;

 

  /* Аргумент 2 */

  data.arg[1].val = (void *)in_str;

  data.arg[1].size = strlen(in_str) + 1;

  data.arg[1].dir = DIR_IN;

 

  /*

   * Аргумент 3. Так как это аргумент для вывода данных, необходимо

   * указать размер приёмного буфера

   */

  data.arg[2].val = (void *)out_str;

  data.arg[2].size = MAX_SIZE;

  data.arg[2].dir = DIR_OUT;

 

  /*

   * Возвращаемое значение функции ядра. Установка поля направления

   * не требуется, так как оно всегда выходное

   */

  data.ret.val = (void *)&ret_val;

  data.ret.size = sizeof(int);

 

  /*

   * Наконец, вызываем ioctl для /dev/kapi. Затем драйвер kapi

   * вызывает функцию ядра my_kernel_func. Она также заполняет

   * data.ret.val возвращаемым значением функции ядра.

   */

  if (ioctl(dev_fd, MY_KERNEL_FUNC, (void *)&data) < 0){

    perror("ioctl failed");

    return -1;

  }

 

  /* Возвращаемое значение функции */

  return ret_val;

}

 

Предыдущая  Содержание  Следующая