Articles of c + +

与电篱笆库海湾合作委员会不生效

我写了一个在dynamic分配时有内存问题的代码片段; 当用-lefence选项编译时,似乎没有效果。 这里是代码段: int main(int argc, char *argv[]) { int *a = (int *)malloc(2*sizeof(int)); for(int i = 0; i <=2; ++i){ a[i] = i; printf ("%d\n",a[i]); } free(a); return 0; } 和编译选项: gcc -g3 -Wall -std=c99 outOfBound.c -lefence 预期的结果是,当执行a.out时, i将分配给2并且调用a[i]=i之后会有一个核心转储。 那么为什么 – -lefence不起作用? 我也把循环上限增加到了9,但是还没有electric-fence调用的核心转储。 (实际上默认是有一个核心转储,但是这可能是由于MALLOC_CHECK_ env可取的,因为当我export MALLOC_CHECK_=0 ,将不会有更多的核心转储)。 更新 : nm -A a.out的全部结果如下: a.out:08049f28 d […]

在time.h中解决timepec的重定义

我正在编写一个包含/usr/include/linux/time.h和/usr/include/stdlib.h. 问题是: stdlib.h包含/usr/include/time.h ,它定义了“ struct timespec' ,而/usr/include/linux/time.h也定义了一个。 这引入了重新定义的编译错误。 我在这两个头文件中检查了'struct timespec'的定义: 在/usr/include/time.h中: struct timespec { __time_t tv_sec; /* Seconds. */ long int tv_nsec; /* Nanoseconds. */ }; 在/usr/include/linux/time.h中: struct timespec { __kernel_time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; 看来这些定义确实是等价的,但我无法certificate这一点。 我的问题是:是否有一个可靠的方法来解决这个重新定义? 关于这个问题的讨论链接也非常感谢。 谢谢。

查找由fmemopen创build的文件的大小

我正在使用fmemopen创build一个variablesFILE* fid将其传递给一个函数从打开的文件中读取数据。 在这个函数的某个地方,它使用下面的代码来找出文件的大小: fseek(fid, 0, SEEK_END); file_size = ftell(fid); 这在常规文件的情况下效果很好,但是在由fmemopen创build的文件ID的情况下,我总是得到file_size = 8192 任何想法为什么发生这种情况 有没有一种方法来获得适用于常规文件和用fmemopen创build的文件的正确的文件大小? 编辑:我打电话给fmemopen : fid = fmemopen(ptr, memSize, "r"); memSize != 8192 EDIT2: 我创build了一个最小的例子: #include <cstdlib> #include <stdio.h> #include <string.h> using namespace std; int main(int argc, char** argv) { const long unsigned int memsize = 1000000; void * ptr = malloc(memsize); FILE *fid […]

linux交叉编译和dynamic库/链接

我正在努力为BeagleBoard开发。 因此我安装了CodeSourcery Sourcery_G ++ _ Lite工具链。 我想使用opencv库。 所以我把源代码下载到我的Ubuntu devolepment系统中,用gcc作为共享库编译并安装了这个库。 当我为x86架构构build一个helloworld应用程序时,一切都很好。 现在,我想用ARM架构的其他工具链编译相同的应用程序。 编译/链接时,我得到这些警告/错误: john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -c ImageProcessing.cpp -o ImageProcessing.o -I/usr/local/include cc1plus: warning: include location "/usr/local/include" is unsafe for cross-compilation john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -c Main.cpp -o Main.o -I/usr/local/include cc1plus: warning: include location "/usr/local/include" is unsafe for cross-compilation john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -oApplication -L/usr/local/lib Main.o ImageProcessing.o -lopencv_core /usr/local/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search […]

HTTP持久连接

尝试使用Linux套接字接口在C中实现一个简单的HTTP服务器我遇到了一些特定的function,我希望它有一些困难,即持久连接。 使用单独的TCP连接一次发送一个文件相对比较容易,但似乎并不是非常有效的解决scheme(考虑多个握手)。 无论如何,服务器应该在一个TCP连接期间处理多个请求(HTML,CSS,图像)。 你能否给我一些线索如何解决这个问题?

拦截stat()

我已经成功拦截了read() , write() , open() , unlink() , rename() , creat()调用,但是用截然不同的语义拦截stat()没有发生。 我用LD_PRELOAD改变了执行环境。 我错过了什么吗? 该代码是相当庞大的,哪一部分将是最有用的发布,所以你可以帮助? 谢谢。 编辑:我保持介入的统计()包装简单,以检查它是否工作。 int stat(const char *path,struct stat *buff) { printf("client invoke: stat %s",path); return 1; }

我如何检测在Linux上的TCP死连接?

我在C上编写了一个程序,在这个程序里,客户端向服务器发送了一次信息。 我使用TCP套接字。有一段时间服务器计算,应该发送结果给客户端。 如何检测服务器或客户端上的连接是否中断?

这是Linux内核代码中的任何一种macros吗?

我发现这在Linux内核代码http://gitorious.org/pandroid/kernel-omap/blobs/5ed7607d45b300a37dd13ad1c79adea56f6687ce/arch/arm/mach-omap2/board-omap4panda.c MACHINE_START(OMAP4_PANDA, "OMAP4430 Panda Board") .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, .map_io = omap_panda_map_io, .init_irq = omap_panda_init_irq, .init_machine = omap_panda_init, .timer = &omap_timer, MACHINE_END 我没有得到这是什么..? 这是一个macros或结构或什么..? 定义说 /* * Set of macros to define architecture features. This is built into * a table by the linker. */ #define […]

如何在OS X和Linux上安装MSBuild?

我期待在我的Linux笔记本电脑上安装MSBuild,这样我就可以构build一个我的C#OSS项目。 我怎么会这样做呢? 我遇到了一些指导,例如这个build议安装MSBuild NuGet包的指南,但似乎没有正式的或积极的维护。 有一个官方的软件包源,我可以安装MSBuild?

在linux上跟踪键盘和鼠标事件

如何在C中跟踪键盘或鼠标事件? 例如,如果用户按下ESC Shift等,我应该能够跟踪它。 鼠标的方法也一样。 如果用户移动鼠标或向左或向右点击。 实现的想法是与计时器创build一个小屏幕保护程序,我正在努力如何跟踪键盘或鼠标事件重置计时器。