问题标签 [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.

0 投票
4 回答
10075 浏览

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是该问题的一个有用介绍...

0 投票
7 回答
30752 浏览

c - fread/fwrite 将大小和计数作为参数的基本原理是什么?

我们在这里讨论了为什么fread()fwrite()为每个成员取一个大小并计数并返回读/写的成员数,而不仅仅是取一个缓冲区和大小。我们能想到的唯一用途是,如果你想读/写一个结构数组,这些结构不能被平台对齐整除,因此已经被填充,但不能那么普遍以至于保证这个选择在设计中。

fread(3)

函数 fread() 从 stream 指向的流中读取数据的 nmemb 元素,每个 size 字节长,并将它们存储在 ptr 给定的位置。

函数 fwrite() 将 nmemb 数据元素(每个 size 字节长)写入 stream 指向的流,从 ptr 给定的位置获取它们。

fread() 和 fwrite() 返回成功读取或写入的项目数(即,不是字符数)。如果发生错误或到达文件结尾,则返回值是一个短项目计数(或零)。

0 投票
7 回答
8412 浏览

c - 有什么普通的理由使用 open() 而不是 fopen()?

经过很长一段时间后,我正在用 C 语言做一个小项目。这些恰好包括一些文件处理。我在各种文档中注意到,有些函数返回FILE *句柄,有些函数返回(小整数)描述符。两组功能都提供了我需要的相同基本服务,所以我使用它真的没关系。

但我很好奇收藏智慧:是用fopen()和朋友更好,还是open()和朋友更好?

编辑由于有人提到缓冲与非缓冲和访问设备,我应该补充一点,这个小项目的一部分将在 FUSE 下编写用户空间文件系统驱动程序。因此,文件级别的访问可以像在“文件”(即图像)上一样容易地在设备(例如 CDROM 或 SCSI 驱动器)上进行。

0 投票
5 回答
6181 浏览

networking - 如何判断套接字从哪个接口接收到消息?

如果一个套接字被绑定到IN6ADDR_ANYorINADDR_ANY并且您使用诸如recvfrom()在套接字上接收消息的调用。有没有办法找出消息来自哪个接口?

在 IPv6 链接范围消息的情况下,我希望 from 参数recvfrom()scope_id字段初始化为接口 ID。不幸的是,它0在我的测试程序中设置为。

有人知道找到这些信息的方法吗?

0 投票
1 回答
500 浏览

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 之间是否存在导致链接器问题的另一个区别?

编辑

有关搜索的所有详细信息以及我的最终解决方案,请参阅此内容。

0 投票
1 回答
10112 浏览

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 ......

0 投票
6 回答
7341 浏览

java - 相当于Java中的memcmp()?

如果我有两个byte[]数组,是否有一个内置函数来比较它们 ala C 的memcmp()

0 投票
3 回答
3194 浏览

linux - linux如何同时32位和64位?或者那是在 glibc 中处理的东西?

Linux 如何同时 32 位和 64 位?或者那是在 glibc 中处理的东西?

我运行 CentOS 5.3,它是“64 位”版本;虽然我为 64 位和 32 位构建东西。据我所知,Windows 应该有一个 32 位模拟器。Linux做同样的事情吗?它是在用户空间还是内核空间?

如果 libc 处理它,它是不是有点像模拟器说,我将链接 32 位应用程序,但对内核说 64 位?

0 投票
1 回答
1207 浏览

visual-studio - MSVC _open/_close/等

为什么 API 的 _open、_close 和其他标准文件 i/o 函数都带有下划线前缀?这些不是一些标准的一部分吗?

0 投票
2 回答
6998 浏览

c - 关闭 FILE 指针而不关闭底层文件描述符

通过使用fdopen()fileno()可以使用现有文件描述符打开流。但是,一旦您使用流打开文件,关闭文件的正确方法是fclose()指向FILE指针。如何关闭流,但保留打开的文件描述符?

这种行为类似于调用fflush()then fileno(),然后不再使用FILE指针,除非在关闭时。另一个问题是,如果你再fdopen()一次,现在有多个FILE指针,你只能关闭其中一个。