问题标签 [clib]
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.
java - 如何使用 java jnr 推断 clib 结构
jnr 有没有办法为我构造一个结构,以便使用 jnr 访问返回的调用。
例如,如果我想使用
其中 struct statvfs 是:
我怎么能访问这个?
c - Windows 程序员转向 linux - 编码约定
我已经为 Windows 开发了很长时间,主要是 WinApi(和 .Net)。
我已经开始学习基本的 Linux,我对这些差异有一些疑问:
在 Windows 中,我几乎没有使用过 C 标准库。
如果我需要 API,我会搜索 MSDN 并找到合适的库\函数。
从表面上看,在 Linux 中,C 标准库就是一切。
我见过的所有代码示例都使用了标准库(而不是使用一些 Linux 内部函数,比如 Linux“CreateFile”)。
这真的是如何编写“正确的”linux代码吗?使用 C 标准库?
如果我想读取文件或分配内存是 fopen\malloc 要走的路吗?
如果我的第一个问题的答案是肯定的(我猜会的)
与强大的 WinApi 相比,C 标准库是无能为力的。
假设我希望获得正在运行的进程列表 (CreateToolhelp32Snapshot) 或创建线程或进程 (CreateThread\CreateProcess),我应该如何在 Linux 中做到这一点?
文档。
在 Windows 中,我所需要的都可以在 MSDN 中找到。
如果我有一个“我该怎么做”的问题(如上面的问题),我应该去哪里?
我的主要文档来源在哪里。
非常感谢,迈克尔。
visual-c++ - 关于 MSVC 编译器的 open()、_open() 和 fopen() 之间的区别?
我看到这三个功能都与打开文件有关。
打开:
此 POSIX 函数已弃用。请改用符合 ISO C++ 标准的 _open。
_打开:
打开一个文件。这些功能已被弃用,因为有更安全的版本可用;见_sopen_s,_wsopen_s。
开放:
打开一个文件。这些执行附加参数验证和返回错误代码的函数的更安全版本可用;参见 fopen_s、_wfopen_s。
那么,为什么会有三个呢?什么时候用哪个?我认为 POSIX 很好,但为什么 MSDN 说不open
推荐使用 POSIX 版本?是否有任何与前导下划线相关的命名约定,以便我可以根据它的第一个外观选择正确的函数?
当我查看ACPICA 代码时,我看到以下代码: 似乎该_XXX
版本可以禁用某些MS 语言扩展,这些扩展到底是什么?
加 1
似乎单个下划线前缀_XXX
是微软的惯例。比如_DEBUG、_CrtSetDbgFlag和前面提到的_open。引用MSDN的一些话:
在 Microsoft C++ 中,带有两个前导下划线的标识符保留用于编译器实现。因此,Microsoft 约定是在 Microsoft 特定关键字之前使用双下划线。这些词不能用作标识符名称。
默认情况下启用 Microsoft 扩展。为确保您的程序完全可移植,您可以在编译期间通过指定 ANSI 兼容的 /Za 命令行选项(为 ANSI 兼容性而编译)来禁用 Microsoft 扩展。执行此操作时,Microsoft 特定的关键字将被禁用。
启用 Microsoft 扩展后,您可以在程序中使用 Microsoft 特定的关键字。为了符合 ANSI,这些关键字以双下划线开头。为了向后兼容,支持除 __except、__finally、__leave 和 __try 之外的所有双下划线关键字的单下划线版本。此外,__cdecl 可以不带前导下划线。
__asm 关键字替换了 C++ asm 语法。asm 保留用于与其他 C++ 实现兼容,但未实现。使用 __asm。
__based 关键字对 32 位和 64 位目标编译的用途有限。
虽然根据上面的引用,__int64
应该_int64
都可以工作,但是 Visual Studio 没有为_int64
. 但_int64
也可以编译。
添加 2
c - 如何在 libmad 中运行 minimad.c(什么是命令和参数)?
请解释一下如何在 libmad(http://www.underbit.com/products/mad/)中运行 minimad.c?我按照安装文件中的说明进行操作。但是我C语言不好,不知道main函数中需要传递哪些参数。我不明白 argv 中使用了哪些参数(在 main() 中)。
c - 如何将 RFC 3339 日期时间转换为 IST?
我正在使用 Google Drive Rest API 来列出我的 Google Drive 文件。我正在获取驱动器中文件的元数据下方。在那里,我得到了 RFC 3339 格式的“创建时间”。您能帮我将 Google Drive Rest API 返回的时间转换为 IST 吗?在 Linux 平台上有没有办法做到这一点?
注意:我使用 curl 工具从我的 Linux 服务器访问 Google drive rest API。
jq - 在 JQ 中使用具有多个参数的 C 数学函数
如何在 JQ 中使用带有多个参数的 C 数学函数?手册中没有示例。它说的是:
采用单个输入参数(例如
sin()
)的 C 数学函数可用作零参数jq
函数。采用两个输入参数(例如pow()
)的 C 数学函数可用作忽略两个参数的 jq 函数.
采用三个输入参数的 C 数学函数可用作忽略的三参数 jq 函数.
我已经弄清楚如何将单个输入参数函数实现为零参数 jq 函数:
我如何使用类似的东西pow
?
手册中的“忽略的 jq 函数.
”是什么意思?他们是否忽略了管道输入的内容,从某种意义上说,他们不将其作为参数,与仅从管道中获取参数的一个输入参数情况相反?
c - 如何在 macOS Big Sur 中添加 C-Libraries?
我想添加一个 C-Library,只需键入以下内容即可将其包含在代码中:
当我像这样使用完整路径时,它可以工作:
有没有办法将lib添加到某种标准位置,gcc会在哪里找到它?
我尝试了以下方法,但对我不起作用: 如何在 Macos for bash 中为 gcc 添加默认包含和库路径?
(两者echo $LD_LIBRARY_PATH
都是echo $DYLD_LIBRARY_PATH
空的,将所有 *.h 文件复制到 /usr/local/ 也不起作用。)
非常感谢您的帮助!
memory-management - C/C++:减少浪费的最佳可增长缓冲区分配大小
假设 MS 编译器和 C 函数realloc
,增加分配(可增长缓冲区)以减少浪费的最佳大小是多少。显然,如果在增长缓冲区之间没有其他分配,realloc
则可以处理任何大小,但是对于更大的增长块大小,在增长之间会有许多其他分配,什么大小最好?
我想到了 4096,但我看到的大多数 C 堆管理的方式是使用标题,因此使用 4096 最终需要比页面大小更多的空间(标题的大小),这可能会导致大量浪费下一页。所以总的来说,是否有一种通用的方法可以获取标头的大小并使缓冲区从 4096 向下对齐 16 字节?或者大多数当前 C 库的堆管理器是否处理 4096 特殊问题?
谢谢。