Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 02:58   #1
spilver
Новичок
Джуниор
 
Регистрация: 13.01.2012
Сообщений: 2
Сообщение lirc и O_NONBLOCK

Всем привет. Столкнулся с такой проблемой.
Пытаюсь написать небольшое приложение для lirc.
Код HTML:
#include <errno.h>
#include <unistd.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <lirc/lirc_client.h>

#include <fcntl.h>
#include <assert.h>

int sock, i=1;

void setSockNonblock(int sockfd)
{
    int arg = fcntl(sockfd, F_GETFL, NULL);
    arg |= O_NONBLOCK;
    fcntl(sockfd, F_SETFL, arg); // ---> Segfault Here
}


int main(int argc, char *argv[]) {

	struct lirc_config *config;
	char argf[]="irexec";
	char *progname=argf, *code, *c;
	int ret, flags;

	sock= lirc_init(argf,1);
	lirc_readconfig(NULL,&config,NULL);

	setSockNonblock(sock);

	while(lirc_nextcode(&code)==0) {
		ret=lirc_code2char(config,code,&c);
		if (c) printf("Execing command \"%s\" :: %d\n",c, i);
		else printf(":: %d\n", i);
		i++;
	}

	lirc_freeconfig(config);
	lirc_deinit();
	return 0;
}
для того чтобы проверка lirc_code2char работала в цикле нужно разблокировать сокет, что я и сделал установив флаг O_NONBLOCK, но почему-то именно при установке этого флага программа сегфолтится...

Код HTML:
./lirc
Ошибка сегментирования
./gdb lirc
(gdb) run
segfault
(gdb) backtrace
#0  0x00007ffff70ad7af in __rawmemchr_sse2 () from /lib/libc.so.6
#1  0x00007ffff7099170 in _IO_str_init_static_internal () from /lib/libc.so.6
#2  0x00007ffff7089580 in __isoc99_vsscanf () from /lib/libc.so.6
#3  0x00007ffff7089517 in __isoc99_sscanf () from /lib/libc.so.6
#4  0x00007ffff7bd718b in ?? () from /usr/lib/liblirc_client.so.0
#5  0x00007ffff7bd8e77 in lirc_code2char () from /usr/lib/liblirc_client.so.0
#6  0x0000000000400926 in main (argc=1, argv=0x7fffffffe668) at main.cc:35
и все, тупик, ничего по этой проблеме не нашел...
Может быть кто-то сталкивался с подобным ?
Заранее спасибо за помощь

P.S. Это все пишется под linux
spilver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц