Articles of c + +

构build一个makefile依赖/inheritance树

道歉,如果我解释这很糟糕,或者要求出血明显,但我是Linux内核的新手,有点在深处… 我们有一个embedded式Linux系统,这个系统包含一个非常糟糕的SDK,其中包含数百个文件夹,大多数文件夹包含一个rules.make,make,make.config或者一些变体,而根文件夹包含一个“master”makefile&rules.make,这意味着你可以从根文件夹中input“make sysall”,然后构build整个包。 到目前为止这样好,但试图debugging它是有点问题,因为文档会说: “ 要让内核输出debugging消息,只需定义#outputdebugmessagesplz ” 好的,但是这些东西中的一些是在“master”make / rules文件中定义的,其中一些是在子make / rules / config文件中定义的,一些是在.h文件中定义的。当然,它更好打开/closures这些东西从“顶部”make.config而不是修改个别.h文件,然后必须记得再次closures它们。 所以我认为从主“make”文件开始recursion地构build一个树,并遵循它所做的一切,定义或重新定义的所有东西,等等,但是似乎并没有一个简单的方法呢? 我假设我缺less一个“make”选项,把这个信息吐出来,或者只是makefile / config的用法。

在Linux中sched_setaffinity cpu亲和力

我在一台服务器上做了一个sched_setaffinitytesting,使用1个socket,4个内核,下面的/ proc / cpuinfo显示了cpu的信息: processor : 0 model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz cache size : 2048 KB physical id : 0 siblings : 4 cpu cores : 4 processor : 1 model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz cache size : 2048 KB physical id : 0 […]

在哪里为我的守护程序应用程序放置一个debugging日志文件?

我使用C语言和Linux作为我的编程平台。 我正在学习如何创build一个守护进程,并且我想创build一个日志文件,以便在守护进程中写入一条debugging消息。 我的问题是我应该把日志文件放在我的系统中。 我应该把它放在var文件夹? 请指教。 非常感谢。

Tcl.h:没有这样的文件或目录

我试图将一些代码从Solaris机器移植到Linux(特别是Redhat)机器上。 代码编译时没有问题,在Solaris框中运行没有问题。 但是,在Linux上重新编译时,我遇到了tcl.h的问题 – 编译器告诉我error: tcl.h: No such file or directory #include "tcl.h"多个文件的error: tcl.h: No such file or directory 。 据我所知,安装tcl8.4&tk8.4: /usr/lib/tcl8.4 /usr/share/tcl8.4 /usr/lib/tk8.4 /usr/share/tk8.4 但是,我无法在任何地方findtcl.h。 有谁知道它会在哪里? 还是Solaris需要的文件之一,但是Linux不需要包含在内? 或者甚至是否需要安装tcl / tk 8.4以外的东西?

vector <string>在超出范围之后不会清除内存

我遇到了以下问题,我不确定我是错的还是它的一个非常奇怪的错误。 我填充了大量的string,并希望它在某个点被清除。 这是一个简单的例子 #include <string> #include <vector> #include <unistd.h> //sleep #include <iostream> int main(){ { std::vector<std::string> strvec; for(long i = 0; i < 1000000; ++i){ std::string out = "This is gonna be a long string just to fill up the memory used by this fucking pthread\n"; strvec.push_back(out); } std::cout << "finished loading 1st\n"; sleep(10); // […]

使用xscreensaver编写屏幕保护程序的提示和技巧?

我已经做了几个月的OpenGL编程,现在我想用xscreensaver库编写一个屏幕保护程序。 在问这个问题之前,我看到了如何开发Linux屏幕保护程序 ,但我认为这个问题还不够具体。 我已经做了什么 – 我下载了xscreensaver源文件并阅读了README.hacking。 我在源代码的hacks目录中为greynetic.c(在自述文件中提供了用于理解xscreensaver的屏幕保护程序之一)代码做鬼混。 我阅读这个网页 – http://www.dis.uniroma1.it/~liberato/screensaver/simplesquares.html (从链接问题的答案之一)。 我下载了simplesquares.c代码,我试图运行它。 我的问题是什么 – 我不明白我应该如何编译和执行任何屏保的变化。 用gcc编译前面提到的simplesquares.c并运行可执行文件显示根本没有输出。 难道我做错了什么? 注意 :在编译simplesquares.c时,必须将-lX11添加到gcc命令以便链接X11库。否则,它将返回未定义的引用错误。 编辑 : 在编译屏幕保护程序greynetic.c时,会返回一些错误,其中一些是我在这里转载的: greynetic.c:(.text+0x4f): undefined reference to `XGetWindowAttributes' greynetic.c:(.text+0xa6): undefined reference to `get_boolean_resource' greynetic.c:(.text+0xd9): undefined reference to `get_pixel_resource' greynetic.c:(.text+0x112): undefined reference to `get_pixel_resource' greynetic.c:(.text+0x13e): undefined reference to `get_integer_resource' greynetic.c:(.text+0x185): undefined reference to `XCreateGC' greynetic.c:(.text+0x1dd): undefined reference […]

处理具有非空读取缓冲区的套接字stream时出现“非法查找”错误

我目前正在使用<sys/socket.h>在Linux x86_64上编写一个服务器应用程序。 通过accept()接受连接后,我使用fdopen()将检索到的套接字封装到FILE*stream中。 写入和读取FILE*stream通常工作得很好,但是一旦我写入了它,套接字变得不可用,而它有一个非空的读取缓冲区。 为了演示目的,我写了一些代码来监听连接,然后使用fgetc()将input逐行读入到读缓冲区中。 如果该行太长而不能放入缓冲区,则不能完全读取,而是在下一次迭代中读取。 #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> FILE* listen_on_port(unsigned short port) { int sock = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in name; name.sin_family = AF_INET; name.sin_port = htons(port); name.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sock, (struct sockaddr*) &name, sizeof(name)) < 0) perror("bind failed"); listen(sock, 5); int newsock = accept(sock, 0, […]

我应该释放由setlocale返回的指针吗?

int main(int argc, char *argv[]) { char *ret = setlocale(LC_ALL, NULL); // should I free 'ret' ??? // free(ret); return 0; } 我已经在Linux和OS X 10.10上都试过了,在Linux中,我不能调用'free',但是在OS X中,如果我不叫'free',valgrind会抱怨内存泄漏。 ==62032== Memcheck, a memory error detector ==62032== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==62032== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info […]

-finstrument-functions不适用于dynamic加载的g ++共享对象(.so)

我正在用Ubuntu上的g ++共享对象(.so)文件testing-finstrument函数。 我发现了一个奇怪的行为,即只有库是静态链接的,函数似乎才起作用。 如果我用dlopen / dlsym等链接到库,代码的function仍然有效,但它不会调用__cyg_profile *函数。 这里有一些代码来快速重现问题: MyLib.h #ifndef __MYLIB_H__ #define __MYLIB_H__ class MyLib { public: void sayHello(); }; #endif MyLib.cpp #include "MyLib.h" #include <iostream> using namespace std; void MyLib::sayHello() { cout<<"Hello"<<endl; } MyLibStub.cpp(到.so的C接口) #include "MyLib.h" extern "C" void LoadMyLib () { MyLib().sayHello(); } Trace.cpp #include <stdio.h> #ifdef __cplusplus extern "C" { void __cyg_profile_func_enter(void […]

非阻塞networking地址parsing(gethostbyname或getaddrinfo)?

使用经典的nsswitch.confconfiguration: hosts: files dns 尝试使用gethostbyname (或getaddrinfo )parsing名称可能需要一段时间,如果DNS不应答(或configuration不当)。 有没有办法在nsswitch.conf中configuration超时,或使用替代API来pipe理超时?