Articles of c + +

free()是否删除存储在dynamic分配内存中的数据?

我写了一个简单的程序来testingfree()后的dynamic分配内存的内容,如下所示。 (我知道我们不应该在空闲后访问内存,我写了这个来检查空闲内存后会有什么内容) #include <stdio.h> #include <stdlib.h> main() { int *p = (int *)malloc(sizeof(int)); *p = 3; printf("%d\n", *p); free(p); printf("%d\n", *p); } 输出:3 0 我以为它会打印垃圾值或第二次打印声明崩溃。 但它总是打印0。 1)这种行为是否依赖于编译器? 2)如果我试图释放内存两次释放(),核心转储正在生成。 在手册页中提到程序行为是exception的。 但是我总是得到核心转储。 这种行为是否也依赖于编译器?

如何在其默认程序 – Linux中打开文件

如何以编程方式在Linux的默认程序中打开文件(即时通讯使用Ubuntu 10.10)。 例如,打开* .mp3将打开电影播放器​​(或其他)中的文件。 先谢谢你。 斯捷潘

我如何运行一个外部程序?

我在Linux mint 12上。 我想运行一个程序usr/share/application/firefox ,然后在任何地方传递一个string。 我还没有find针对Linux的解决scheme,但从目前为止我所看到的有很多关于Windows的理论。 size_t ExecuteProcess(std::wstring FullPathToExe, std::wstring Parameters, size_t SecondsToWait) { size_t iMyCounter = 0, iReturnVal = 0, iPos = 0; DWORD dwExitCode = 0; std::wstring sTempStr = L""; /* – NOTE – You should check here to see if the exe even exists */ /* Add a space to the beginning […]

如何让更多的内存和避免堆栈溢出大量的recursion?

我正在testing执行大量recursion调用的algorithm的时间。 我的程序在约128k的recursion调用中死亡,这只需要0.05秒。 我想让更多的记忆在我的分析中有更长的时间。 我正在运行Linux和使用gcc。 是否有一个系统调用,或环境variables,或gcc标志,或包装,或什么?

如何在Linux中重新绑定udp套接字

我是一个有经验的Linux套接字编程人员,正在编写一个有很多出接口的服务器应用程序。 现在,服务器套接字与INADDR_ANY一起绑定到进程开始时的随机源端口。 稍后在提交对特定节点的响应时,我需要分配一个固定的源IP地址 。 标准的做法是调用bind。 但是,绑定被调用一次端口号, 连续调用失败,无效的参数错误。 创build一个新的套接字并不是一个好的select,因为在响应某些客户端时,我将不得不经常这样做。 我也探讨了SO和许多套接字选项,如IP_FREEBIND,但它并不完全符合我的scheme。 也许使用IP_PKT_INFO和设置源地址可能会工作,除非它遭受同样的问题,即不允许套接字一旦绑定到INADDRANY重新绑定到一个固定的源IP后者。 有没有办法解除绑定现有的套接字或替代方式来设置传出数据包中的源IP地址? int sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock < 0) printf("Failed creating socket\n"); struct sockaddr_in addr; memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_port = htons(1500); addr.sin_addr.s_addr = INADDR_ANY; // first bind succeeds if ( (status = bind(sock, (struct sockaddr *) &addr, sizeof(addr))) < 0) […]

等待多个信号而不需要等待(C / C ++ Linux)

如果我有多个信号量,那么我怎么能有一个进程块,直到至less有一个信号量是免费的? 我知道我可以用忙等待循环来做到这一点,例如: // blocks until one of the semaphores in sems is free, returns // index of semaphore that was available int multiple_sem_wait(sem_t **sems, int num_sems) { while (true) { for (int i = 0; i < num_sems; ++i) { if (sem_trywait(sems[i]) == 0) { return i; } } } } 但是有没有办法做到这一点,没有繁忙的循环? 也许除了应该使用的信号量外,还有一些IPC技术? 谢谢

编译我自己的内核(而不是从linux-kernel源代码)

我从这里跟随内核教程 即时通讯编辑我的文件有问题。 当我尝试编译时出现以下错误: main.c:8: error: expected declaration specifiers or '…' before 'size_t' main.c:8: error: conflicting types for 'memcpy' ./include/system.h:5: note: previous declaration of 'memcpy' was here main.c: In function 'memcpy': main.c:12: error: 'count' undeclared (first use in this function) main.c:12: error: (Each undeclared identifier is reported only once main.c:12: error: for each function it appears […]

在Linux和OS X上的ns精度单调时钟

clock_gettime(CLOCK_MONOTONIC, …)可以在Linux中使用,但不能在OS X上使用clock_gettime(CLOCK_MONOTONIC, …)计时器在OS X中可用,但在Linux中不可用。 我怎样才能得到一个ns的精度单调时钟在C和Linux和OS X的作品?

getnameinfo指定socklen_t

getnameinfo原型的第二个参数要求socklen_ttypes,但sizeof使用size_t。 那么我怎样才能得到socklen_t? 原型: int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen, char *restrict node, socklen_t nodelen, char *restrict service, socklen_t servicelen, int flags); 例: struct sockaddr_in SIN; memset(&SIN, 0, sizeof(SIN)); // This should also be socklen_t ? SIN.sin_family = AF_INET; SIN.sin_addr.s_addr = inet_addr(IP); SIN.sin_port = 0; getnameinfo((struct sockaddr *)&SIN, sizeof(SIN) /* socklen_t */, BUFFER, NI_MAXHOST, […]

调用posix_spawn时closures所有文件句柄

我想使用posix_spawn(…)(或者非常相似的东西)产生一系列进程。 这个函数接受一个posix_spawn_file_actions_ttypes的参数,它允许我指定如何处理打开的文件句柄。 从文档中我可以确定,所有文件都从调用进程inheritance,并根据posix_spawn_file_actions_t结构中的信息进行修改。 我希望所有文件都未被生成的进程打开(stdin,stdout和stderr除外)。 有谁知道如何做到这一点? 显然这可以在一些实现中使用'POSIX_SPAWN_CLOEXEC_DEFAULT'spawn属性标志来完成,但是这在我的平台上是不可用的。 我也可以使用fcntl(…)在打开文件的时候指定'close on exec',但是我觉得这个问题的一个更加本地化的解决scheme是可取的。