вопрос по модулю для freebsd
Добавлено: 2009-05-27 21:24:12
Freebsd 8-current.
Написал модуль ядра. Он создаёт в /dev файлик boost. В нём определены функции open,close,read и write. По стандарту флаг match(он определён только в этом модуле) равен 0. Он отлавливает вызов open к определённым файлам. И когда кто-то открывает определённый файл, то модуль устанавливает флаг match в 1. Так вот... Будет висеть в системе даемон, типа этого:
Нужно сделать так, чтобы фунция read повисла, переводя даемон в состояние idle, до тех пор, пока k не будет отлична от 0.(типа как accept переводит процесс в состояние idle до тех пор, пока не подконектяться..). Код read для boost:
Подскажите, плз, в какую сторону копать?
Написал модуль ядра. Он создаёт в /dev файлик boost. В нём определены функции open,close,read и write. По стандарту флаг match(он определён только в этом модуле) равен 0. Он отлавливает вызов open к определённым файлам. И когда кто-то открывает определённый файл, то модуль устанавливает флаг match в 1. Так вот... Будет висеть в системе даемон, типа этого:
Код: Выделить всё
int k = 0;
int fd = open("/dev/boost", O_RDONLY);
do {
read(fd, &k, sizeof(int));
} while(k!=-1);
close(fd);
Код: Выделить всё
int boost_read(struct cdev *dev, struct uio *uio, int flag) {
// sleep until match=1
memcpy((int *)uio->uio_iov->iov_base, &match, sizeof(int));
match = 0;
return 0;
}