我应该释放/删除 getenv() 返回的 char* 吗?
char * val; val = getenv("ENV_VAR_NAME"); 上面是获取环境变量的代码,如果不释放 getenv(char*) 返回的内存,会导致内存泄漏吗?如果不是,请回答…
我是否需要担心 Valgrind 报告超出我的应用程序范围的错误?
当运行 Valgrind 的 memcheck 工具时,我经常会收到数十万(或更多,因为 Valgrind 在 100K 处截止)小的无效读取语句,例如: ==32027== Invalid rea…
如何执行“ulimit -n 400”的等效操作从C内部?
在启动用 C 编写的程序之前,我必须运行命令“ulimit -n 400”来提高允许打开的文件数,但是有没有办法在 C 程序中执行等效操作? 也就是说,增加该进…
链接旧版本的 libc 以提供更大的应用程序覆盖范围
Linux 二进制文件通常动态链接到核心系统库 (libc)。这使得二进制文件的内存占用非常小,但依赖于最新库的二进制文件将无法在旧系统上运行。相反,链…
不同字符串指针/数组类型上的 strsep 分段错误
平台:Linux、OSX 编译器:GCC 我有一个简单的程序,目前让我感到困惑 - 我知道我正在弄乱几种不同类型的数组/指针来产生这个问题 - 这是故意的 - 我…
确定准备好进行 recv() 处理的字节数
我可以使用 select() 来确定对 recv() 的调用是否会阻塞,但是一旦我确定有字节要读取,有没有办法在实际调用 recv() 之前查询当前有多少字节可用?…
为什么 strtof 和 strtod 的 endptr 参数是指向非常量 char 指针的指针?
strtod 具有以下签名: float strtof(const char *str, char **endptr); double strtod(const char *str, char **endptr); 它们各自将输入字符串 str…
fread/fwrite 将大小和计数作为参数的基本原理是什么?
我们在工作中讨论了为什么 fread() 和 fwrite() 获取每个成员的大小并计算并返回读/写的成员数量,而不是仅仅获取缓冲区和大小。我们可以想到的唯一用…
如何在 Linux 上重新实现(或包装)系统调用函数?
假设我想完全接管 open() 系统调用,也许要包装实际的系统调用并执行一些日志记录。 一种方法这是使用 LD_PRELOAD 加载一个(用户制作的)共享对象库…
比 memset 更快的零内存方法?
我了解到 memset(ptr, 0, nbytes) 确实很快,但是有没有更快的方法(至少在 x86 上)? 我假设 memset 使用 mov,但是当将内存归零时,大多数编译器使…
静态链接新的 libc 符号以与较低的 libc 版本一起使用
我有一个使用 eventfd 和 timefd 内核系统调用的应用程序。为此,您需要一个现代内核和一个支持它们的 libc,至少是 2.8。 我目前的情况是,我有一个…