Articles of c + +

如何在Eclipse中设置一个Linux C ++项目?

我在Linux环境中有一个现有的C ++项目,并想将其导入到Eclipse IDE中。 不知道是否应该启动一个新的Eclipse C ++项目,或者是否有一些方法来导入源文件?

在传递NULL的情况下转储核心

strdup(null)转储核心。 尝试在Ubuntu和FreeBSD的两个。 为什么? 它不应该返回null吗? char *b = NULL; a = strdup(b); 这将会在strdup调用中转储核心。

Windows上的Cmake不会添加共享库path(适用于Linux)

我一直在Linux上使用CMake和Eclipse一段时间,一直在处理包含众多可执行文件和共享对象的多个目标项目。 我使用了源代码构build和在Linux上的二进制文件被放到自己的目录。 当我在linux上执行这个操作时,eclipse以某种方式能够find共享对象,并且很好地运行可执行文件,但是在Windows上这种情况不会发生。 在Windows上,我不得不添加一个指向dll的PATH环境variables,或者我可以将其构build到一个bin和lib目录中(尽pipe我过去曾经用过一个我忘记的问题,使我想避免这个问题) 。 为什么这在Windows上运行不同于linux? 这是我失踪的设置还是这只是不工作? 构build本身正在完美工作。 我正在使用MinGW,Eclipse Kepler和Windows 7 64位。 提前致谢。

堆栈限制和线程之间的关系

在Linux实现(或任何操作系统)中,ulimit -s <value >与堆栈大小(在线程级别)之间的关系是什么? 是<number of threads > * <each thread stack size >必须小于< stack size assigned by ulimit command >有效alignment? 在下面的程序中 – 每个线程分配char [PTHREAD_STACK_MIN]并创build10个线程。 但是,当ulimit被设置为10 * PTHREAD_STACK_MIN时,它不会因为中止而造成内存溢出。 对于stacksize的一些随机值(远小于10 * PTHREAD_STACK_MIN),它是核心转储。 为什么这样? 我的理解是,stacksize表示由进程的所有线程总和占用的堆栈。 线程函数 #include <cstdio> #include <error.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h> #include <sys/resource.h> using namespace std; #include <pthread.h> #include <bits/local_lim.h> const unsigned […]

检查正在运行的程序中的内存泄漏

出于对检查内存泄漏的好奇心,我有个疑问。 作为一个在过去的一两年中经常使用valgrind来检查代码中的内存泄漏的人,我突然想到在程序生命周期之后 ,它只能检测到丢失/未logging的内存。 所以,有鉴于此,我在想,如果你有一个长期运行的程序, malloc()是间歇性的,在应用程序退出之前不会free() ,那么潜在的吃内存(不一定是通过泄漏 )是巨大的,使用这些工具是不可观察的,因为他们只检查程序的生命周期。 是否有类似GDB的工具可以在运行时停止应用程序,并检查在应用程序生命周期中是否被引用的内存?

Python的ctypes从Linux上的libc调用reboot()

我试图通过ctypes从Python中的libc调用rebootfunction,我只是不能得到它的工作。 我一直在引用man 2 reboot页面( http://linux.die.net/man/2/reboot )。 我的内核版本是2.6.35。 下面是来自交互式Python提示符的控制台日志,我试图让我的机器重启 – 我做错了什么? 为什么不是ctypes.get_errno()工作? >>> from ctypes import CDLL, get_errno >>> libc = CDLL('libc.so.6') >>> libc.reboot(0xfee1dead, 537993216, 0x1234567, 0) -1 >>> get_errno() 0 >>> libc.reboot(0xfee1dead, 537993216, 0x1234567) -1 >>> get_errno() 0 >>> from ctypes import c_uint32 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567), c_uint32(0)) -1 >>> get_errno() 0 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), […]

Mac和Linux上qsort_r的不同声明

我们来看看Linux中的函数qsort_r (/usr/include/stdlib.h): typedef int (*__compar_d_fn_t)(const void *, const void *, void *); extern void qsort_r (void *__base, size_t __nmemb, size_t __size, __compar_d_fn_t __compar, void *__arg) __nonnull ((1, 4)); 让我们来看看Mac中的函数qsort_r (/usr/include/stdlib.h): void qsort_r(void *, size_t, size_t, void *, int (*)(void *, const void *, const void *)); 正如你所看到的,这些声明是彼此不同的(参数序列)。 这是令人惊讶的! 抱怨某个地方解决这个问题会有效吗?

读(fd,NULL,0); 它有什么作用? 它是明确的吗?

我在几个程序中看到了下面的说法,大部分/全部似乎都是针对Linux的。 rv = read(fd, NULL, 0); 在一些程序中,它是在一个循环中,在一个单一的声明。 它究竟做了什么? 手册页说,像这样的调用可能会或可能不会检查错误… 回报价值的意义是什么? 什么types的文件描述符被支持? 如果rv==0如何区分“没有错误”从例如“套接字closures”。

长型64位linux

很简单的问题家伙,但也许我只是忘记了一些东西。 在64bit的linux中,长度是8bytes是正确的吗? 如果是这样的话,我想设置第64位,我可以做到以下几点: unsigned long num = 1<<63; 然而,每当我编译这个,它给了我一个错误,说我左移超过宽度。 另外,如果我想采取长types的第一个32位(没有符号扩展),我可以这样做: num = num&0xFFFFFFFF; 或者如何: num = (int)(num); 谢谢。

GNU-getline:关于EOF的奇怪行为

testing 为了findgetline()在面对EOF时的行为,我写了下面的testing: int main (int argc, char *argv[]) { size_t max = 100; char *buf = malloc(sizeof(char) * 100); size_t len = getline(&buf, &max, stdin); printf("length %zu: %s", len, buf); } 而input1是: a b c Ctrl-D Enter 结果: length 4: abc //notice that '\n' is also taken into consideration and printed input2: a b c […]