问题标签 [libc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
msvcrt - Windows 下的 MSVCRT 是否像 *nix 下的 glibc (libc)?
我经常遇到与程序可执行文件捆绑在 MSVCRT(或它们更当前的等价物)中的 Windows 程序。在典型的 PC 上,我会找到许多相同 .DLL 的副本。我的理解是 MSVCRT 是 C 运行时库,有点类似于 *nix 下的 glibc/libc.so。
为什么 Windows 程序必须随身携带他们的 C 库,而不仅仅是共享系统范围的 libc?
更新:感谢 Shog9,我开始阅读有关 SxS 的文章,这进一步让我看到了 DLL 链接问题(DLL Hell) - http://blogs.msdn.com/b/martynl/archive/2005/10/ 13/480880.aspx是该问题的一个有用介绍...
c - fread/fwrite 将大小和计数作为参数的基本原理是什么?
我们在这里讨论了为什么fread()和fwrite()为每个成员取一个大小并计数并返回读/写的成员数,而不仅仅是取一个缓冲区和大小。我们能想到的唯一用途是,如果你想读/写一个结构数组,这些结构不能被平台对齐整除,因此已经被填充,但不能那么普遍以至于保证这个选择在设计中。
从fread(3):
函数 fread() 从 stream 指向的流中读取数据的 nmemb 元素,每个 size 字节长,并将它们存储在 ptr 给定的位置。
函数 fwrite() 将 nmemb 数据元素(每个 size 字节长)写入 stream 指向的流,从 ptr 给定的位置获取它们。
fread() 和 fwrite() 返回成功读取或写入的项目数(即,不是字符数)。如果发生错误或到达文件结尾,则返回值是一个短项目计数(或零)。
c - 有什么普通的理由使用 open() 而不是 fopen()?
经过很长一段时间后,我正在用 C 语言做一个小项目。这些恰好包括一些文件处理。我在各种文档中注意到,有些函数返回FILE *
句柄,有些函数返回(小整数)描述符。两组功能都提供了我需要的相同基本服务,所以我使用它真的没关系。
但我很好奇收藏智慧:是用fopen()
和朋友更好,还是open()
和朋友更好?
编辑由于有人提到缓冲与非缓冲和访问设备,我应该补充一点,这个小项目的一部分将在 FUSE 下编写用户空间文件系统驱动程序。因此,文件级别的访问可以像在“文件”(即图像)上一样容易地在设备(例如 CDROM 或 SCSI 驱动器)上进行。
networking - 如何判断套接字从哪个接口接收到消息?
如果一个套接字被绑定到IN6ADDR_ANY
orINADDR_ANY
并且您使用诸如recvfrom()
在套接字上接收消息的调用。有没有办法找出消息来自哪个接口?
在 IPv6 链接范围消息的情况下,我希望 from 参数recvfrom()
将scope_id
字段初始化为接口 ID。不幸的是,它0
在我的测试程序中设置为。
有人知道找到这些信息的方法吗?
linux - 旧版链接器(使用 libc5)在 linux 内核 2.6.25 上失败
我们有一个使用 libc5 的旧版链接器,由于多种因素,我们只有二进制文件而不是源代码。是的,版本控制可以让我们摆脱当前的问题......现在我们的完整工具链和产品线都在使用它,但是这匹特别的马早已不复存在。
此链接器适用于 linux 内核 2.6.24,但在 2.6.25(和 2.6.26)上失败并显示消息
我们在使用相应的旧版编译器时遇到了类似的问题,但是通过一些 stackoverflow.com的答案和大量研究发现,编译器问题是由 linux 内核 2.6.25 中的“brk 随机化”引起的。解决方法是设置 sysctl vars 和 environment var:
但是,这对链接器没有帮助。
我通过使用“ldd”发现链接器具有更多的共享库依赖项(编译器只有 libc.so.5):
而且我已经读到我可能必须安装 libg++.so.27 的 libc5 版本。我犹豫是否这样做,因为我不知道这是否会覆盖最新的 libg++.so.27 并导致非 libc5 应用程序出现问题。
那么,我是否找到并安装了 libc5 版本的 libg++.so.27,或者是否有更好的方法来禁用 brk 随机化,或者内核 2.6.24 和 2.6.25 之间是否存在导致链接器问题的另一个区别?
编辑
有关此搜索的所有详细信息以及我的最终解决方案,请参阅此内容。
android - 在 Android 上安装预构建的二进制文件:“未找到”
我正在尝试在自定义 Android 映像中安装预构建的二进制文件。为此,我已将其复制到一个新目录中prebuilt/android-arm/
,其中包含Android.mk
与此类似的文件:
因此,如果我运行make system_image binary_name
,二进制文件将被复制到/bin/
系统映像中。如果我运行模拟器,我可以在/system/bin
. 权限与其他可执行文件 ( -rwxr-xr-x
) 相同,根据file
,这是一个 ARM 二进制文件 ( ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
)。
但是当我在模拟器上运行它时,它说:
我已经跟踪了它,这就是我所看到的:
但是文件在那里,strace 能够找到它。
知道会发生什么吗?
更新:正如 Kristof 所说,这可能是动态链接的问题,但我没有适用于 Android ARM 的 ldd ......
java - 相当于Java中的memcmp()?
如果我有两个byte[]
数组,是否有一个内置函数来比较它们 ala C 的memcmp()
?
linux - linux如何同时32位和64位?或者那是在 glibc 中处理的东西?
Linux 如何同时 32 位和 64 位?或者那是在 glibc 中处理的东西?
我运行 CentOS 5.3,它是“64 位”版本;虽然我为 64 位和 32 位构建东西。据我所知,Windows 应该有一个 32 位模拟器。Linux做同样的事情吗?它是在用户空间还是内核空间?
如果 libc 处理它,它是不是有点像模拟器说,我将链接 32 位应用程序,但对内核说 64 位?
visual-studio - MSVC _open/_close/等
为什么 API 的 _open、_close 和其他标准文件 i/o 函数都带有下划线前缀?这些不是一些标准的一部分吗?
c - 关闭 FILE 指针而不关闭底层文件描述符
通过使用fdopen()
,fileno()
可以使用现有文件描述符打开流。但是,一旦您使用流打开文件,关闭文件的正确方法是fclose()
指向FILE
指针。如何关闭流,但保留打开的文件描述符?
这种行为类似于调用fflush()
then fileno()
,然后不再使用FILE
指针,除非在关闭时。另一个问题是,如果你再fdopen()
一次,现在有多个FILE
指针,你只能关闭其中一个。