Articles of c + +

从GTK条目中获取文本

我试图得到什么用户input在文本字段( entry ),但是当我运行它,我不断从gtk_entry_get_text null 。 错误: Gtk-CRITICAL **: IA__gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry)' failed Entry contents: (null) 代码: static GtkWidget *txtVoltage; static GtkWidget *window; static GtkWidget *vbox, *hbox; static void entry_Submit(GtkWidget *widget, GtkWidget *entry) { const gchar *SVolt = gtk_entry_get_text(GTK_ENTRY (txtVoltage)); printf ("Entry contents: %s\n", SVolt); } static void CreateTextBox(GtkWidget *entry, GtkWidget *vbox) { entry = […]

实现一个内存debugging器

我用ptrace(2)编写了一个debugging器,主要用于审计系统调用和redirectsubprocess的标准IO。 我也想用这个debugging器来检测内存泄漏。 我认为这可能与对系统调用brk(2)引用计数一样简单,但事实并非如此。 不幸的是(或者幸运的是),无论内存是否被正确释放,Linux似乎都会在程序结束时调用brk(2) 。 我在一个调用malloc(3)和free(3)的程序以及一个调用malloc(3)的程序中看到了这一点 – 在程序调用exit_group(2)时,它们都具有相同的brk(2)调用计数exit_group(2) ,这是返回发生(也许我可以解释这些结果不正确?)。 或者,也许exit_group(2)不等同于从主返回,我应该设置一个不同的断点来审计brk(2)的调用计数。 我在这里发现了一个类似的问题,但我还没有find答案。 据我所知,Valgrind是一个完美的工具,但会造成相当大的开销。 有没有人有有用的信息检测内存泄漏与ptrace(2) ? 用ptrace(2)可能吗? 有没有更实用的方法? 是否有内存debuggingsubprocess的API? 编辑: 如果有分配内存的其他function,我也会把它们计算在内。 在malloc的页面上,它表示mmap(2)也用于内存分配。 所以,我也会数这个。

我们可以给Linux用户空间程序中的每个信号分配信号处理程序吗?

如果我们指定不同的处理程序来说SIGABRT,等等。我们可能无法杀死这个进程,显然,除非我们可以,否则这不是一个好主意。 所以,手册说SIGSTOP和SIGKILL不能被阻止或忽略,这是否意味着它必须杀死或停止进程,不pipe你分配了什么处理程序?

更改堆栈空间

目前,我试图在集群系统中实现共享堆栈。 这个系统有两个地址空间,一个是私有的,在所有处理器之间共享。 我怎么能改变在C编程堆栈的开始和结束? 也就是说,我想把堆栈放在一个共享空间中,改变程序的stream程来使用它。

使用本地主机或给定DNS服务器上的套接字发送反向DNS请求

我正在尝试获取IPV4地址的反向DNS结果。 通过挖掘它很简单,通过dig -x 1.2.3.4 。 但是我必须在Linux C环境下使用套接字来获得相同的结果。 最终,我应该在recv*函数中获得权限的启动。 我试图通过更改IP 1.2.3.4到4.3.2.1.in-addr.arpa这个在缓冲区中发送到DNS服务器的套接字。 首先我做了简单的DNS,我得到了正确的DNS响应(与dig foobar.com相同)。 我认为我的主要麻烦是在dig -x 1.2.3.4发送-x ,因为dig foobar.com我可以做的事情…

networking应用程序有多less个传入缓冲区?

我正在编写一个networking应用程序,它接收来自多个客户端的数据:当收到一个数据包时,应用程序将读取并修改该数据包,然后将数据包转发给一个或多个客户端。 我想为每个客户端连接使用一个输出队列,所以应用程序能够监视每个输出队列的填充级别,并检测每个客户端的负载。 传入数据包的路由可以通过单个线程来实现,该线程应该分析每个数据包的头部以确定目标客户端:该线程还访问路由表以便正确地转发数据包。 如何处理传入的消息? 我可以为每个连接使用一个共享队列或一个input队列: 如果我使用单个共享队列 ,它将由路由线程和处理与客户端的连接的线程同时访问; 如果我为每个input连接使用一个input队列 ,它将由路由线程和由客户端处理该连接的唯一线程同时访问。 在第一种情况下,路由线程的作用将会非常简单,因为它只应从队列中取出下一个数据包并将其转发给另一个客户端。 在第二种情况下,路由线程应该逐个检查所有的input队列。 第二种方法可以避免最快的连接可以填充共享队列,从而增加其他连接可以find队列满的可能性。 第二种方法将要求路由线程应遵循一个策略,以确保与input队列相关的公平行为。 在这种情况下可以采用什么样的政策? 而且,还有什么其他原因可能导致人们select第一种或第二种解决scheme? 这两种解决scheme的优点和缺点是什么?

我怎样才能从PCM的缓冲区?

我想在Linux上用ALSA播放一个PCM文件,下面是我的代码: #include <stdio.h> #include <stdlib.h> #include <alsa/asoundlib.h> main (int argc, char *argv[]) { int i; int err; short buf[128]; snd_pcm_t *playback_handle; snd_pcm_hw_params_t *hw_params; if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) { fprintf (stderr, "cannot open audio device %s (%s)\n", argv[1], snd_strerror (err)); exit (1); } if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0) […]

在OpenCV和BCM2835上使用Raspberry Pi

我目前正在使用Raspberry Pi并使用Raspberry Pi相机模块。 我打算在RPi上使用OpenCV进行image processing,目前看起来没什么问题。 但是,我正在尝试将BCM2835库与OpenCV一起使用,无法将其整合。 我试图在Makefile中进行更改,并添加bcm库,并添加BCM库的path,但似乎没有任何工作。 请在inputvideo进行一些image processing后,帮助我整合两个库,以便驱动GPIO。 谢谢。

获取linux可执行文件的加载地址(__builtin_return_address和addr2line)

我正在写一些代码,为每个内存分配存储回溯。 然后,我将这些列表写入文件进行离线分析。 在win32中,我使用_AddressOfReturnAddress ,然后手动创build回溯。 由于每次运行的地址都是随机的,我使用GetModuleInformation和lpBaseOfDll来获取基地址。 这对x86很有用,没有FPO,这对我来说已经足够了。 然后使用win32 API加载PDB将地址转换为函数名称。 我将如何在Linux上做到这一点? 我目前的做法是使用__builtin_return_address(x)和addr2line离线得到相同的结果。 问题是每次运行的地址都是随机的,所以addr2line不理解它们。 __executable_start不起作用,因为它每次运行返回相同的值。 有没有办法在运行时获得我的可执行文件的基地址? 一次运行给了我这个: __executable_start: 0x8048000 backtrace: 0x9cce628 0x9cce2b8 0x9cce260 0x9cce1f8 0x9cce138 0x9cce0c8 0x9cce060 0x9cce008 而下一个: __executable_start: 0x8048000 backtrace: 0x8db6628 0x8db62b8 0x8db6260 0x8db61f8 0x8db6138 0x8db60c8 0x8db6060 0x8db6008 等等。

如何编程以便不同的进程在不同的CPU核上运行?

我正在写2个进程的Linux C程序。 我将在不同的机器上运行程序。 这些机器可能有多个CPU核心。 当我运行程序时,系统会为不同的进程分配不同的CPU核心吗? 或者我需要编写一些代码,以充分利用CPU核心?