所有问题: [libc]
15 个问题
失败的malloc()的单元测试
涉及失败的malloc()的单元测试代码路径的最佳方法是什么?在大多数情况下,这可能并不重要,因为您正在执行之类的操作 thingy *my_thingy = malloc(sizeof(thingy)); if (my_thingy == NULL) { fprintf(stderr, "We're so screwed!\n"); exit(EXIT_FAILURE); } ,但是在某些情况下,除了死掉以外,您还有其他选择,因为您已经为缓存或其他分配了一些额外的东西,并且可以回收该内存。 但是,在那些您可以尝试从失败的malloc()中恢复的情况下,您在非常不寻...
在Mac OS X上,如何获取用于源代码级调试的System / LibC调试版本?
我从opensource.apple.com下载了LibC源代码,但是由于它是一个整体库/usr/lib/libSystem.B.dylib的一部分,我必须以某种方式重新构建整个库吗? 我有一个从Linux移植的BSD命令行程序。我希望能够在LibC函数中设置断点并逐步执行。我正在尝试解决程序中似乎是堆损坏的问题(在Linux上不会发生-我已经移植回Linux并在其中运行memcheck。)
Stdlib Itoa函数
我在互联网上搜索,看到很多使用itoa()函数的代码,他们声称此函数在stdlib.h中。 我正在使用2个版本的GCC: (GCC)4.2.4(Ubuntu 4.2.4-1ubuntu4)) (GCC)4.1.2 20080704(Red Hat 4.1.2-44) 并且它们都没有itoa()函数(我编译程序并报错:对'itoa'的未定义引用)。 有什么想法吗? 谢谢。
用dlsym插入库
我正在编写一个中介库,以跟踪libc中某些库函数的用法,例如open(),close(),connect()等。它在大多数应用程序上通常都能很好地工作。但是,当我使用PHP尝试使用它时,尤其是使用PHP的MySQL模块时,没有跟踪到该模块内部对libc的任何函数调用(因此,没有connect(),socket()等)。“ strace”告诉我,系统调用了socket(),connect()等操作。在模块和libmysqlclient.so.16.0.0上运行'file'表示它们都是动态链接的。因此,它不应该是由静态链接引起的问题。可能是什么问题? 我正在使用Fedora 11 64位版...
关闭FILE指针而不关闭基础文件描述符
通过使用fdopen()、fileno(),可以使用现有文件描述符打开流。但是,使用流打开文件后,关闭文件的正确方法是将fclose()指针指向FILE。如何关闭流,但保留打开的文件描述符? 此行为类似于先调用fflush()然后再调用fileno(),然后再也不使用FILE指针,除非关闭。另一个需要注意的是,如果再次输入fdopen(),则现在有多个FILE指针,并且只能关闭其中一个。
MSVC _open/_close/etc
Why are the API's _open, _close, and other standard file i/o functions prefixed with an underscore? Aren't these part of some standard?
How is linux simultaneously 32bit and 64bit? Or is that something handled in glibc?
How is Linux simultaneously 32bit and 64bit? Or is that something handled in glibc? I run CentOS 5.3 and it is a "64 bit" version; although I build things for 64 bit and 32 bit. From what I think I know, Windows supposedly has a 32bit emulator. Does Linux do the same thing? Is it in userspace or...
在Android上安装预构建的二进制文件:“未找到”
我正在尝试在自定义Android映像中安装预构建的二进制文件。为此,我已将其复制到prebuilt/android-arm/中的新目录,其中包含与此文件类似的Android.mk文件: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := binary_name LOCAL_MODULE := binary_name LOCAL_MODULE_CLASS := EXECUTABLES include $(BUILD_PREBUILT) 因此,如果我运行make system_image bi...
旧版链接程序(使用libc5)在Linux内核2.6.25上失败
我们有一个使用libc5的旧式链接器,由于一些因素,我们只有二进制文件,而没有源文件。是的,版本控制将使我们免于当前的问题……现在我们的整个工具链和产品线都在使用它,但是这种特殊的方式早已不复存在。 此链接器可在Linux内核2.6.24上运行,但在2.6.25(和2.6.26)上它将失败,并显示消息 虚拟内存超过“新” 相应的旧版编译器也有类似的问题,但是有一些stackoverflow.com 答案并且许多研究发现编译器问题是由linux内核2.6.25中的“ brk随机化”引起的。解决方法是设置sysctl变量和环境变量: / proc / sys /...
如何判断套接字从哪个接口接收消息?
如果套接字绑定到IN6ADDR_ANY或INADDR_ANY,并且您使用诸如recvfrom()之类的调用在套接字上接收消息。有没有办法找出消息来自哪个接口? 对于IPv6链接范围消息,我希望recvfrom()的from参数会将scope_id字段初始化为接口ID。不幸的是,在我的测试程序中将其设置为0。 有人知道找出这种信息的方法吗?
是否有一般原因使用open()而不是fopen()?
离开C很长时间后,我正在用C做一个小项目。这些碰巧包括一些文件处理。我在各种文档中注意到,有一些函数返回FILE *句柄,而其他函数则返回(小整数)描述符。两组功能都提供了我所需的相同基本服务,因此,我使用它并不重要。 但是我对收集的智慧感到好奇:使用fopen()和朋友,还是open()和朋友更好? 编辑由于有人提到了缓冲与非缓冲以及访问设备,因此我应该补充一点,这个小项目的一部分将是在FUSE下编写用户空间文件系统驱动程序。因此,文件级别的访问可以像在“文件”(即映像)上一样容易地在设备(例如CDROM或SCSI驱动器)上进行。
fread / fwrite以大小和数量为参数的基本原理是什么?
我们在这里讨论了为什么fread和fwrite占用每个成员的大小,然后计数并返回读取/写入的成员数,而不仅仅是获取缓冲区和大小。我们能想到的唯一用途是,如果您想读/写一个数组数组,这些数组不能被平台对齐均匀地整除,因此已经被填充了,但是不能如此普遍以至于不能保证这种选择在设计中。 来自 FREAD(3): 函数fread()读取数据的nmemb元素,每个元素长1个字节, 从流指向的流中,将它们存储在给定的位置 通过ptr。 函数fwrite()写入nmemb数据元素,每个大小字节 长,指向流所指向的流,从该位置获取它们 由ptr提供。 fr...
Windows下的MSVCRT是否像* nix下的glibc(libc)一样?
我经常遇到Windows程序,这些程序与MSVCRT(或它们的最新版本)捆绑在一起,并带有程序可执行文件。在典型的PC上,我会找到相同.DLL的许多副本。我的理解是MSVCRT是C运行时库,有点类似于* nix下的glibc / libc.so。 为什么Windows程序必须带同他们的C库,而不仅仅是共享系统范围的libc? 更新:感谢Shog9,我开始阅读有关SxS的信息,这使我进一步了解了DLL链接问题(DLL地狱)- http://blogs.msdn.com/b/martynl/archive/2005/10/13/480880.aspx 是这个问题的一个有用的介绍...