据我所知,没有getline()与文件描述符相同的libc ,而不是使用FILE *.
是否有(技术)原因?
是否有人可以在gcc版本问题上给初学者一些帮助?
我在遇到了这个问题"version GLIBCXX_3.4.20' not found"。在我链接之后:如何在CentOS 7.2上用yum安装gcc 5.3?
我遇到了以下额外问题:
scl enable devtoolset-7 bash
git: relocation error: libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
Run Code Online (Sandbox Code Playgroud) 我在glibc工作,我需要得到当前线程的id.为此我使用
syscall(SYS_gettid);问题是,我被迫包括bits/syscall.h而不是理想的情况即 sys/syscall.h.
sys/syscall.h 内部调用bits/syscall.h但是用#ifndef _LIBC宏包装.即
#ifndef _LIBC
/* The Linux kernel header file defines macros `__NR_<name>', but some
programs expect the traditional form `SYS_<name>'. So in building libc
we scan the kernel's list and produce <bits/syscall.h> with macros for
all the `SYS_' names. */
# include <bits/syscall.h>
#endif
Run Code Online (Sandbox Code Playgroud)
还bits/syscall.h指出"永远不要直接使用bits/syscall.h;而是包含sys/syscall.h".
由于_LIBC我将在我的情况下定义,因为我正在直接编写代码malloc.c,请建议我如何克服这个问题.
谢谢,卡皮尔
我正在使用 libc 编写一个应用程序,为此我正在寻找 iptables 的 api,以便我可以使用我的程序添加防火墙规则。是否有任何可用的 api 集来执行此操作。
为什么我不能在 LibC 中的导出函数中设置断点(使用 gdb)?作为动态链接的 Libc,它必须包含它导出的函数的符号。我不应该能够为这些函数中的任何一个设置断点吗?
我只是试图做:
(gdb) b _IO_vfprintf@@GLIBC_2.2.5
Function "_IO_vfprintf@@GLIBC_2.2.5" not defined.
Run Code Online (Sandbox Code Playgroud)
但是查看 ELF 文件中的 dynamyc-symbols 表,该符号确实存在:
127: 0000000000049cf0 20904 FUNC GLOBAL DEFAULT 12 _IO_vfprintf@@GLIBC_2.2.5
Run Code Online (Sandbox Code Playgroud) 在 libc 中有两个函数可以将系统时间转换为日历时间 -gmtime和localtime,但只有localtime反函数 - mktime。为什么 没有反函数gmtime,如果不应该有,为什么gmtime存在?
据我所知,一些数学函数包含在 libc 中,而另一些则包含在 libm 中。我通过实验发现:
$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libm.so.6 | grep -w abs
$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libc.so.6 | grep -w abs
T abs
Run Code Online (Sandbox Code Playgroud)
是否有关于 libm 必须提供哪些数学函数的要求?libc 和 libm 是否一起提供 C 标准所需的所有数学函数?
我不明白llvmlibc-restrict-system-libc-headersClang Tidy 中的检查(链接)。
我在 C++ 代码中包含 C 库,如下所示:
#include <cstddef>
Run Code Online (Sandbox Code Playgroud)
我应该更改什么来修复此 Clang Tidy 检查?它应该被修复吗?
C 程序中可以进行系统调用吗?考虑一下:
int main()
{
int f = open("/tmp/test.txt", O_CREAT | O_RDWR, 0666);
write(f, "hello world", 11);
close(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在此示例代码中,open、write、 和close是库函数。在我的搜索过程中,我得出的结论是它们是函数而不是系统调用。这些函数(open、write和close)中的每一个都会进行系统调用。
问题
write和系统调用,而如果我们使用不同的选项编译它,则它会调用库函数?read我在 Chromium-os/glibc中查看fread的源代码,对此越来越感到困惑。
首先,我对 fread 被声明为一个宏的方式感到惊讶,它带有函数名,然后是它的参数,最后是它的参数类型:
/* Read NMEMB chunks of SIZE bytes each from STREAM into P. */
size_t
DEFUN(fread, (p, size, nmemb, stream),
PTR p AND size_t size AND size_t nmemb AND register FILE *stream)
Run Code Online (Sandbox Code Playgroud)
这背后的理由是什么,为什么不
size_t fread(PTR p, size_t size, size_t nmemb, register FILE * stream)
Run Code Online (Sandbox Code Playgroud)
哪个更具可读性?
我对这一行特别困惑:
int c = __fillbf(stream);
Run Code Online (Sandbox Code Playgroud)
并且在任何地方都找不到这个功能。我认为这可能是一个我还不知道的系统调用,但它不是表的一部分
那么背后的真正代码是__fill_bf(register FILE *)什么?
编辑:感谢DYP的宏定义, …