Tag: linux

在Linux中是否存在_set_purecall_handler()的等效项?

我想用自己的方法覆盖纯虚拟调用的标准处理程序( __cxa_pure_virtual() )。 Windows的答案是’_set_purecall_handler()’。 Linux / GNU中是否有类似的工具?

udp连接套接字上的ICMP“目标不可达”数据包

我用这个函数创建了连接的UDP套接字 /* Creates connected udp socket */ int udp_connect( const char *host, const char *serv) { int sockfd, n; struct addrinfo hints, *res, *ressave; bzero(&hints, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ( ( n = getaddrinfo( host, serv, &hints, &res)) != 0) err_quit( “udp_connect error for %s, %s: %s”, host, serv, gai_strerror(n)); […]

计算使用sleep()时的执行时间

我正在尝试从beagle骨中的ADC读取数据,运行Angstrom linux发行版。 我需要使用像sleep()这样的延迟机制,只在特定时间读取样本,以帮助符合特定的采样率。 我还需要计算执行时间。 这是一个示例POC(概念certificate),以certificate我面临的问题: #include #include #include int main() { clock_t begin, end; while(1) { begin = clock(); sleep(1); // delay for 1 sec end = clock(); printf(“Execution time = %f\n”,((float)(end-begin)/CLOCKS_PER_SEC)); } } 我总是把执行时间设为0.0; 为什么我的结果不是1? 我的猜测是调用sleep()会抢占我的程序,但我不确定。 我还有什么其他选择来计算执行时间,包括延迟?

如何使用select从stdin读取输入?

我试图使用select从stdin读取,之后我通过套接字将数据发送到服务器。 以下片段应遵循上述逻辑; 但它没有从stdin读取任何内容。 此外,它打印Enter command:用户第一次输入字符串后。 行printf(“%d %s\n”,__LINE__ ,buf); 也不打印任何东西。 fd_set rfds; struct timeval tv; int retval; char buf[BUFLEN]; while(1) { FD_ZERO(&rfds); FD_SET(STDIN_FILENO, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; retval = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv); if (FD_ISSET(STDIN_FILENO, &rfds)) { if (fgets(buf,BUFLEN, stdin)) { printf(“%d %s\n”,__LINE__ ,buf); if (strncmp(buf, “exit”, 4) == 0) […]

如何在GDB中调试libgcc源代码? Ubuntu 14.04.1

我想在Ubuntu 14.04.1的源代码级别的GDB中调试libgcc_s.so.1 。 所以我下载了libgcc1-dbg并获得了gcc的源代码。 在GDB中,我使用directory来指定gcc源目录。 但是当我在GDB中出现一些问题,并在libgcc_s.so.1中断时,我无法获得源代码。 Reading symbols from /home/love/pri…(no debugging symbols found)…done. (gdb) directory ~/source/gcc-4.9/ Source directories searched: /home/lovelydream/source/gcc-4.9:$cdir:$cwd (gdb) c The program is not being run. (gdb) run Starting program: /home/lovelydream/prison warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000 > Program received signal SIGINT, Interrupt. 0x00007ffff75e6350 in __read_nocancel () […]

在c ++中回调成员函数

class scanner { private: string mRootFilePath; static int AddToIndex( const char *,const struct stat *,int); public: scanner(string aRootFilePath){ mRootFilePath = aRootFilePath; } string GetFilepath(){ return mRootFilePath; } void Start(); }; int scanner :: AddToIndex(const char *fpath, const struct stat *sb,int typeflag) { fprintf(stderr,”\n%s\t%d”,fpath,typeflag); return 0; } void scanner :: Start() { ftw(mRootFilePath.c_str,(int (*)( const char […]

在linux驱动程序中定期调用spi_write

我正在为LCD显示器编写驱动程序。 根据应用笔记,我需要定期向命令写一个伪SPI写,以最大化其对比度。 为此,我设置了一个定时器,并尝试从定时器处理程序中编写对比度最大化的2字节伪命令。 但是,出现问题是因为s​​pi_write函数导致完整的内核崩溃并出现以下错误: BUG: scheduling while atomic: swapper/1/0/0x00000102 基于以下post: 如何解决“BUG:调度而primefaces:swapper / 0x00000103 / 0,CPU#0”? 在TSC2007驱动程序? “primefaces调度”表示你试图在某个你不应该睡觉的地方睡觉 – 就像在受自旋锁保护的关键部分或中断处理程序中一样。 也许对spi_write的调用会触发某种睡眠行为。 禁止在这里睡觉是有意义的,因为基于堆栈跟踪,我看到代码处于软IRQ状态: [] (schedule_timeout) from [] (wait_for_common+0x114/0x15c) [] (wait_for_common) from [] (spi_sync+0x70/0x88) [] (spi_sync) from [] (plt_lcd_send_toggle_comin_cmd+0x7c/0x84 [plt_lcd_spi]) [] (plt_lcd_send_toggle_comin_cmd [plt_lcd_spi]) from [] (plt_lcd_timer_handler+0xc/0x2c [plt_lcd_spi]) [] (plt_lcd_timer_handler [plt_lcd_spi]) from [] (call_timer_fn.isra.26+0x20/0x30) [] (call_timer_fn.isra.26) from [] (run_timer_softirq+0x1ec/0x21c) […]

C – 在设备文件中从cat无限读取

我一直有一些头痛无法从cat读取(cat没有关闭,因为它没有从我的读取函数接收函数结束。我怎样才能实现读取结束,以便用cat读取文件只会产生终端每个命令输出1个? function。 这是我写的内核read()函数: static ssize_t dev_read(struct file *file, char *buf, size_t count, loff_t *ppos) { char tmp_buf[MAX_BUF_SIZE]; //defined as 100 int bLen=0; sprintf(tmp_buf, “Some message”); bLen = strlen(tmp_buf); if(copy_to_user(buf,tmp_buf, bLen)){ return -EFAULT; } return bLen; }

调用分叉进程中的读取不起作用(Linux C)

C初学者在这里。 我试图在fork_reducer方法中读取我的reducer_pipes ,但是当我调用read , read下没有任何read被执行。 如果我不打电话给它,它会被执行。 read方法似乎不打印任何错误消息。 C代码 #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1024 #define ALPHA_OFFSET 97 #define LETTERS 26 const int NUM_OF_MAPPERS = 4; const int NUM_OF_REDUCERS = 26; const int PIPE_READ_END = 0; const int PIPE_WRITE_END = 1; const int PIPE_BUFFER_SIZE = 1000; int mapper_pipes[4][2]; int reducer_pipes[26][2]; void […]

在linux内核中嵌入锁定的动态分配/自由结构

我想释放一个嵌入了spin_lock的结构。 场景如下: 我有两个function f1 () { ***************** spin_lock_irqsave(&my_obj_ptr->my_lock, flags) …. …. …………………………………. here f2 is called spin_lock_irqstore(&my_obj_ptr->my_lock, flags) ******************* kfree(my_obj_ptr) } 和f2具有与f1类似的内容。 当f2被调用时,正在使用my_lock,f2必须忙着等待。 但是,当f2进入临界区时,my_obj_ptr是免费的。 内核崩溃…… 我现在想的是在struct my_obj中添加一个ref_count变量 在spin_lock_irqsave => ref_count ++之前 在spin_lock_irqstore => ref_count–之后 在免费之前,请检查ref_count变量。 现在似乎没有崩溃。 我只是想知道是否会有角落案件,我不考虑? 或者有更好的方法来处理这个问题? 任何帮助将不胜感激。 谢谢