Articles of c + +

使成功终止gdb自动退出?

我使用一个debugging脚本连续运行几个相关的进程与debugging器。 我目前使用-x自动执行几个命令(如run )。 如何在debugging过程成功终止时自动退出gdb? 向命令文件添加一个quit命令将导致该命令不仅在成功终止时被处理,而且还会在发生错误时(当时我宁愿接pipe)。 以下是正在发生的事情摘录: + gdb -return-child-result -x gdbbatch –args ./mkfs.cpfs / dev / loop0 GNU gdb(GDB)7.1-ubuntu 读取/home/matt/cpfs/mkfs.cpfs…done中的符号。 程序正常退出。 断点2在0x805224f:文件log.c,第32行。 (GDB) gdbbatch内容: 开始 b cpfs_log如果级别> =警告

未注册端口重组错误的nf_conntrack_helper_register

我有以下代码来注销和注册sip conntrack从内核3.18 static void __nf_conntrack_sip_fini(void) { int i, j; for (i = 0; i < ports_c; i++) { for (j = 0; j < ARRAY_SIZE(sip[i]); j++) { if (sip[i][j].me == NULL) continue; nf_conntrack_helper_unregister(&sip[i][j]); } } memset(sip, 0, sizeof(sip)); } static int __nf_conntrack_sip_init(void) { int i, j, ret; if (ports_c == 0) ports[ports_c++] = SIP_PORT; for […]

gdb – 列出当前函数的来源而不input其名称

在GDB中,命令: list function 将列出该function的所有来源。 是否有一个命令会列出当前所有函数的源代码,而不需要手动input函数名称?

selectEBADF:哪个FD不好?

我们的生产代码中有一个长期存在的bug。 这本质上是一个基于套接字的守护进程。 它使用select来监听一堆文件描述符。 偶尔(每天一次),select将返回与EBADF。 我已经编写了代码来search不良的filedescriptor,循环遍历每个fd并调用select。 这些调用永远不会返回EBADF。 我也试过fstat。 他们也永远不会返回EBADF。 我也重写了守护进程来使用poll。 这没有帮助。 有没有人有其他的想法? (除了我犯了一个愚蠢的错误,这是所有select易于做)。

statvfs()和statfs()系统调用之间的区别?

为什么statfs()和statvfs()调用在它们如此相似时都存在? 在什么情况下我会比另一个更喜欢?

在C ++中计算一个string的MD5

我有一个很好的内存映射文件的例子,计算文件的MD5哈希值。 这工作正常,没有问题。 我想改变它来计算一个string的MD5散列。 所以这个例子是: (包括#include <openssl/md5.h>来运行这个代码,并且如果你想用文件运行这个代码的话, unsigned char result[MD5_DIGEST_LENGTH]; boost::iostreams::mapped_file_source src(path); MD5((unsigned char*)src.data(), src.size(), result); std::ostringstream sout; sout<<std::hex<<std::setfill('0'); for(long long c: result) { sout<<std::setw(2)<<(long long)c; } return sout.str(); 我做的改变是: std::string str("Hello"); unsigned char result[MD5_DIGEST_LENGTH]; MD5((unsigned char*)str.c_str(), str.size(), result); std::ostringstream sout; sout<<std::hex<<std::setfill('0'); for(long long c: result) { sout<<std::setw(2)<<(long long)c; } return sout.str(); 但是这产生了结果: 8b1a9953c4611296a827abf8c47804d7 而命令$ md5sum […]

可以-std = c99防止我的#包含工作正常吗?

我想在Linux系统上编译一个C程序。 我有一个stdlib.h的#include语句。 当我用gcc编译程序时,如下所示: gcc -std=c99 -g -o progfoo progfoo.c progbar.c 我收到有关Implicit declaration of function [srand48, drand48, bzero, or close]警告。 编译为: gcc -g -o progfoo progfoo.c progbar.c 没有给我警告,但它确实对我使用for循环(这是首先添加-std=c99的理由)大喊大叫。 鉴于这个man srand48提到包括我所拥有的<stdlib.h> ,我不确定还有什么问题可以解决。 for循环对于任何事情来说都不是必须的(它们只是为了节省初始化数组的时间),所以我没有问题去除它们,但是在我做之前我想确认c99标准是否取代了我的#include陈述。 我正在使用gcc 4.1.2-50 (Red Hat) 。

如何在C ++中执行caching操作?

我想在刷新caching后运行我的C ++程序,在运行我的程序之前,我不知道caching中有什么。 在unbuntu上有没有其他的C ++方式,通过它我可以在运行我的程序之前刷新caching。 编辑:刷新caching的动机是…每次我运行我的程序,我不希望我现有的数据结构在caching中有…我的意思是我想要一个冷藏caching..其中所有的访问是从磁盘制作…实现这一目标的一种方式是重新启动计算机…但考虑到我必须运行的实验数量,这对我来说是不可行的。 所以,任何人都可以善意引导我…至于我怎么能做到这一点。

静态链接 – 使用GTKmm应用程序? – 修改

是否可以在Gtk(mm)程序上进行静态链接(编译)? 我需要程序减less对用户系统依赖的中继。 我尝试: g++ -static data/Area.h data/Picture.cpp data/GLScene.cpp data/KBDialog.cpp data/Dialogs.h data/FilePreview.cpp data/MainWindow.cpp prog.cpp -o prog `pkg-config –cflags –libs gtkmm-2.4 gtkglextmm-1.2 exiv2` 但是它失败了: /usr/bin/ld: cannot find -lgtkmm-2.4 /usr/bin/ld: cannot find -lGL /usr/bin/ld: cannot find -latkmm-1.6 /usr/bin/ld: cannot find -lgdkmm-2.4 /usr/bin/ld: cannot find -lpangomm-1.4 /usr/bin/ld: cannot find -lgdk_pixbuf-2.0 /usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/libgio-2.0.a(glocalfileinfo.o): In function `lookup_gid_name': (.text+0x207a): warning: Using 'getgrgid_r' in […]

如何从ac程序运行java程序?

我已经search了这个,但结果是10岁以上,并没有解释什么是JNI是否是唯一的方法,或结果是C + +或C#。 所以这是我的问题: 如何使用下面的代码作为例子从C程序运行Java程序? 我对下面的代码做了哪些具体的修改,让C程序成功调用带有参数的java程序? 在CentOSterminal中,当我在命令行input以下内容时,我能够成功运行一个java程序: java -cp . my.package.SomeClass 1 2 3 同样,从terminal中的同一个文件夹,我可以成功地运行一个C程序时,我在命令行中键入以下内容: ./hello hello.c的代码是: #include <stdio.h> main() { printf("Hello World from C!\n"); } 我如何修改hello.c的代码,以便它也运行带有参数1 2 3 my.package.SomeClass ? 例如,如何完成以下操作,但不会引发错误: #include <stdio.h> main() { printf("Hello World from C!\n"); java -cp . my.package.SomeClass 1 2 3 //What is the right syntax here? } 编辑 […]