LINUX.ORG.RU

Сообщения Iceman82

 

Помогите разобраться с select (C)

Вот такой вот вопрос. Есть стандартный слегка модифицированный пример из мануала по select, в котором происходит ожидание ввода из стандартного устройства 10 секунд:

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
struct timeval timeout;
char string[BUFSIZ];

int len = 0, retval = 0;
fd_set readfd;

timeout.tv_sec = 10;
timeout.tv_usec = 0;

printf("You have 10 seconds to enter your name: ");

FD_ZERO(&readfd);
FD_SET(0, &readfd);

retval = select(1, &readfd, NULL, NULL, &timeout);

if (retval > 0)
{
printf("data are ready\n");
len = read(0, string, sizeof(string));
}
else
{
printf("no input after 10 secs\n");
}

printf("len = %d\n", len);
printf("%s - you're speedy!\n", string);

return (EXIT_SUCCESS);
}

И вывод программы примерно следующий:
andrey@linux:~/WORK/timer_test_2> ./test
andrey<ENTER> <--- это мы вводим
You have 10 seconds to enter your name: data are ready
len = 7
andrey
- you're speedy!

И вопросов, собственно, несколько:
1. почему первый printf срабатывает ПОСЛЕ ввода строки, а не до?
2. почему возврат из select происходит после ввода целой строки, а не после ввода одного символа? ведь данные уже поступили... Есть подозрения, что это связано с настройками терминала, если это так, то подскажите, плз, как это побороть.

Iceman82
()

Ошибка при компиляции своего модуля ядра

Привет всем! Прошу помощи...

Начинаю разбираться с программированием модулей ядра, решил запустить первый модуль "Hello, world", все как по учебнику. Под это дело скачал и установил новое ядро 2.6.20, т.е. исходники есть и ядро по ним компилируется и устанавливается. Написал свой модуль, файлик называется, например, hello.c и создал Makefile такого содержания:

> obj_m += hello.o

Запускаю на компиляцию (из папки, где лежит исходник) вот так:

> make -C /usr/src/linux-2.6.20/ M=`pwd` modules

где /usr/src/linux-2.6.20/ - это директория, где лежат исходники установленного ядра. На выводе получаю вот это:

> linux:/home/andrey/WORK/modules/hello_mod # make -C /usr/src/linux-2.6.20/ M=`pwd` modules > make: Entering directory `/usr/src/linux-2.6.20' > make -C /home/andrey/sources/kernel/2.6.20/linux-2.6.20 O=/usr/src/linux-2.6.20 modules > Building modules, stage 2. > MODPOST 0 modules > make: Leaving directory `/usr/src/linux-2.6.20'

И ничего похожего на [CC] /чего_то_там/hello.o [LD] /чего_то_там/hello.mod.ko, как по идее должно быть, и при этом ничего не создается, никакие модули не появляются.

Т.е., если я правильно понимаю, почему-то не запускается сама компиляция...

В чем может быть проблема?

Iceman82
()

RSS подписка на новые темы