параметр загрузки ядра 2.6.30-gentoo
Нужно вывод ядра при загрузке посмотреть пошагово. Подскажите параметр загрузки ядра? Или комбинацию клавиш. То, что нашел ctrl-Q ctrl-C l scrlock - не работают. Спасибо.
Нужно вывод ядра при загрузке посмотреть пошагово. Подскажите параметр загрузки ядра? Или комбинацию клавиш. То, что нашел ctrl-Q ctrl-C l scrlock - не работают. Спасибо.
Здравствуй, ЛОР!
Ткните носом. Осваиваю Си. Застрял в одном месте.
В программе стандартныe вывода (stdout и stderr) одной консольной программы через каналы (pipe) завел в основную программу. Файловые дескрипторы каналов преобразовал в поток даных (FILE*), чтобы обрабатывать их стандартной библиотекой си. События о том, что в каналах появились новые данные обрабатываю в epoll().
Вот кусок кода.
while (1) {
nr_events = epoll_wait (epfd, events, 64, -1);
if (nr_events<0) {
perror ("epoll_wait:");
free (events);
exit(EXIT_FAILURE);
}
if (nr_events >0) {
for (n = 0; n < nr_events; ++n) {
int i =0;
if (events [n].data.fd == 3) {
while ((sym = fgetc (stream_info)) != '\n') {
buff[i++] = sym;
}
buff[i] = '\0';
printf ("STDOUT - %s \n", buff);
}
int k = 0;
if (events [n].data.fd == 5) {
while ((sym = fgetc (stream_err)) != '\n') {
buff_err[k++] = sym;
}
buff_err[k] = '\0';
printf ("STDERR - %s \n", buff_err);
}
}
}
}
В принципе код рабочий, но, если только принимается одна строка. Если в выводе за одно событие больше 2-х строк, вижу только первую. Остаток прочитается при следующем событии. По коду ясно почему так. Не понятно как правильно определить, что в потоке больше нет данных? И как правильно парсить стандартные потоки?
Добрый день, ЛОР. Вопрос нубский. Но, для меня, пока неясен.
Что имеем: main() и 4 потока (threads) Потоки опрашивают из своих fd и передают в свои fd данные. Здесь используем epoll(). Тут понятно.
Данные от потоков и в потоки передаются в main() через глобальные переменные.Для факта наличия новых данных используются флаги. И все это в while(1). Вот этот момент и не нравится.
Ткните носом, как это правильно можно реализовать? Можно ли использовать epoll() в main() (получается создав fd между потоками и main?)? Граммотно ли это?
Не могу понять, куда копать. Имеется следующий код (это часть, выделил только то, что имеет отношение к вопросу с отладочной печатью):
void httpClientReqBuf (char *url, unsigned char **buff);
char *URL1 = "http://192.168.0.10:9999/json_discret1";
char *URL2 = "http://192.168.0.10:9999/json_discret2";
unsigned char *buff1;
unsigned char *buff2;
while (1)
{
httpClientReqBuf (URL1, &buff1);
printf ("buff1 %s\n", buff1); // здесь печать buff1 проходит нормально
httpClientReqBuf (URL2, &buff2);
printf ("buff2 %s\n", buff2);
printf ("buff1 %s\n", buff1); // здесь печать buff1 не верна
printf ("buff2 %s\n", buff2);
}
вывод
buff1 {"DI_tag1":"1","DI_tag2":"0"}
buff2 {"DI_tag3":"0","DI_tag4":"1"}
buff1 �
buff2 {"DI_tag3":"0","DI_tag4":"1"}
buff1 {"DI_tag1":"1","DI_tag2":"0"}
buff2 {"DI_tag3":"0","DI_tag4":"1"}
buff1 {"DI_tag3":"0","DI_tag4":"1"}
buff2 {"DI_tag3":"0","DI_tag4":"1"}
buff1 {"DI_tag1":"1","DI_tag2":"0"}
buff2 {"DI_tag3":"0","DI_tag4":"1"}
buff1 {"DI_tag3":"0","DI_tag4":"1"}
buff2 {"DI_tag3":"0","DI_tag4":"1"}
Значение строки buff1 сразу за вызовом функции httpClientReqBuf (URL1, &buff1) верно, что и вижу при отладочной печати. Но после вызова функции httpClientReqBuf (URL2, &buff2) значение buff1 меняет свое значение и в разные запросы принимает всякий мусор, может принять и значение buff2. Объясните пожалуйста почему так происходит, почему затирается значение buff1 в памяти? Как мне это правильно реализовать ?
Братцы ткните носом. Разбираюсь с сервером evhttp из библиотеки libevent. Не могу найти пару функций в этой библиотеке:
1. определение IP адреса клиента
2. парсер строки GET запроса ( значение пар name и value)
Спасибо.
Здравствуйте братцы! Ткните носом) Пишу программу на Си. Мне нужно получить данные о новых письмах с сервера GMAIL. Библиотеку парсера пока не освоил, но есть рабочая команда для bash:
curl -u user:password --silent "https://mail.google.com/mail/feed/atom" | awk -F '<fullcount>|</fullcount>' '{print $2}'
system "curl -u user:password --silent "https://mail.google.com/mail/feed/atom" | awk -F '<fullcount>|</fullcount>' '{print $2}'";
Братцы подскажите пожалуйста. Разбираюсь с парсером libxml2. Застрял на одном вопросе. А именно как функции xmlReadFile скормить URL? Если можно кусок кода на Си. Прототип у не такой xmlReadFile (const char * filename, const char * encoding, int options). Если передаю имя файла xml - работает, если даю URL с xml - вылетает с ошибкой «I/O warning : failed to load external entity». Спасибо.
Подскажите пожалуйста. Только начал изучать планирование процессов и sched_setscheduler. Сейчас заткнулся на политике SCHED_RR. Не могу изменить временной интервал для процессов.
Код такой, компилится без ошибок, а значения временного интервала sched_rr_get_interval(0, &ts) не изменяются.
int main(){
struct sched_param param;
struct timespec ts;
param.sched_priority = 99;
/* Необходим максимальный интервал времени */
nice(-20);
if (sched_setscheduler(0, SCHED_RR, ¶m) == -1) {
perror("sched_setscheduler failed\n");
return 3;
}
sched_rr_get_interval(0, &ts);
printf ("max timeslice = %ld msec\n", ts.tv_nsec/1000000);
/* выводит -> max timeslice = 199 msec */
/* Необходим минимальный интервал времени. Обратите также
* внимание, что аргументом для nice является "приращение",
* а не абсолютное значение. Таким образом, выполнение
* nice(39) приводит к работе с приоритетом nice +19
*/
nice(39);
if (sched_setscheduler(0, SCHED_RR, ¶m) == -1) {
perror("sched_setscheduler failed\n");
return 3;
}
sched_rr_get_interval(0, &ts);
printf ("min timeslice = %ld msec\n", ts.tv_nsec/1000000);
/* output -> min timeslice = 9 msec */
return 1;
}
Взято отсюда http://dmilvdv.narod.ru/Translate/ELSDD/elsdd_process_scheduling.html
работаю с Debian 7