Пытаюсь написать небольшое приложение для lirc.
Код: Выделить всё
#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, но почему-то именно при установке этого флага программа сегфолтится...
Код: Выделить всё
./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
и все, тупик, ничего по этой проблеме не нашел...
Все пишут что этого достаточно, отзывов я не нашел. У меня это почему-то не работает
Может быть кто-то сталкивался с подобным ? Как побороть эту беду ?
Заранее спасибо за помощь