![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
glibc
文章平均质量分 54
mzhan017
小张
展开
-
glibc: time.h 与 sys/time.h 的区别;gettimeofday
gettimeofday实际在/sys/time.h文件里。这里的sys的含义更多的是和系统的实现相关,不是标准。原创 2024-04-10 20:54:05 · 352 阅读 · 0 评论 -
Linux: signal: sigcontext 结构体在哪里组装?
英文单词context这里是上下文的意思,那对于应用程序在跑的过程种,有哪些信息属于上下文呢?根据内核的代码来看有,程序执行时的寄存器内容/内存的内容。可以使用接口函数getcontext,来获取这个上下文信息。是内核组装的一个上下文结构体,在用户层可以访问。以下为intel x86-64为例。原创 2024-04-03 13:37:20 · 343 阅读 · 0 评论 -
Linux: dev: glibc: 里面有很多的关于系统调用的函数
glibc-2.28/sysdeps/unix/sysv/linux/syscalls.list文件里的定义,也说是映射到系统调用syslog。所以不要纠结说,为什么在glibc里找不到相应的klogctl.c这么个文件。在Linux系统里有这个系统调用的定义在printk.c这个文件里。从Linux的源码里才能查看到103是什么。原创 2024-01-21 07:57:11 · 484 阅读 · 0 评论 -
C:宏:编程风格:井号与define之间的空格
应该是为了阅读代码的方便性,因为如果不加空格会对代码阅读造成一定的困难;但是为什么不直接将整个#define都缩进呢?应个人的阅读爱好,其实只要养成一种阅读习惯,就可以,不管是前加空格还是后加空格,只要可用表示出if缩进块的功能就好。在这一篇中有提到,井号与define之间空格,可能导致搜索上的一些问题。原创 2024-01-01 12:20:46 · 747 阅读 · 0 评论 -
Linux: dev: glibc: GL 定义
今天找到了这个GL的定义,记录一下,费了一些劲才找到的。(没有想到的是#和define之间还有空格,导致一直搜不到想要的结果。)是在sysdeps/generic/ldsodefs.h文件中。依赖于SHARED和rtld的定义。所以这个的定义就是一个全局结构体里的一个成员。原创 2023-12-29 14:40:13 · 549 阅读 · 0 评论 -
Linux: glibc: net/if.h vs linux/if.h
这个结构体的定义是基本相同,除了linux/if.h里在最后多了一个结构体变量(16个字节)。也就是最终传递给linux内核的内容,内核还是可以匹配,只要不使用多出来的这个变量。上面这个编译错误最终是被解决了,就是怎么放这两个文件都没有问题,顺序无关,order-free。这两个头文件,如果已经存在net/if.h话,后续linux/if.h 里的某些定义会失效。最近看到一段代码改动,用net/if.h替换了linux/if.h。那唯一的好处是,如果是堆上存放这个类型变量,占用的内存小。原创 2023-12-09 04:13:22 · 564 阅读 · 0 评论 -
[glibc] free之后的内存什么时候还给操作系统?
从glibc的内部看,返回给系统的途径,要根据申请的方式来判断,比如根据实现,使用sbrk/brk申请的内存,要用sbrk/brk来返回给操作系统。如果系统内存不够用,可能会导致新的程序例的内存申请返回errno=12,申请不到内存。意思是说,当释放的内存(和前后可以整合的chunk之和)大小超过了这个值,就会走入整合的逻辑,在整合之后根据heap里的top空闲内存的大小(和M_TRIM_THRESHOLD作比较)来判断释放要做trim。举例:假如一个程序,申请的都是小内存,连续申请2G。原创 2023-12-08 21:10:06 · 482 阅读 · 0 评论 -
glibc: dup/dup2/dup3/F_DUPFD
标准输入输出,所对应的file descriptor,是0、1、2,如果想将其他的文件描述符对应到这几个上,也需要使用dup。然后这样对于这个线程来说,这个标准输入与输出就映射到其他的文件描述符,方便实现相关功能,管道,socket pair,线程间通信。都不知道为什么这个dup来,dup去的,有啥意思?比如下面的操作,第一步,用openat打开一个只读的文件,第二步lseek,第三步,用读写打开,再dup。因为这个dup的行为,就是为文件的操作,多设置几个文件描述符,看似没有什么太大的用途。原创 2023-09-22 20:48:20 · 232 阅读 · 0 评论 -
glibc: strlcpy
从这里看,这个strlcpy、strlcat的引入glibc的过程还是很慢长。为什么一直没有放进来?其实还是很方便使用。Kernel里的版本;原创 2023-09-16 16:47:07 · 337 阅读 · 0 评论 -
glibc: pthread: pthread_self 和 getpid 不是一个数
但是POSIX.1,允许实现的自由,不管是返回一个数值,还是一个结构体,都是允许的,只要可以唯一表示一个线程。The pthread_self() function returns the ID of the calling thread. 这个值和pthread_create返回的值是一个值。从glibc的实现,就x86来说是,使用了寄存器fs,访问了tls的数据,pthread.header.self变量。返回值就是pthread_t值,永远不会失败。上面这个结论在使用说明里有明确的说明;原创 2023-07-20 19:59:37 · 170 阅读 · 0 评论 -
glibc: daemon
从 daemon-7里可以看到,这个方法会将之前的线程直接exit_group(0)。这样在判断返回值时其实不是真正的线程的状态。在daemon之前创建的子线程,在主线程执行daemon之后会有不同的getpgid。因为会重新设置setsid。将当前进程运行到后台,脱离当前session、shell。也就是会设置thread的pgid。原创 2023-03-16 21:29:04 · 344 阅读 · 0 评论 -
glibc: __USE_MISC
在include/features.h 里有下面的定义,也就是说;__USE_MISC代表着使用之前4.3 BSD或者System V unix系统设计的一些代码。需要在_DEFAULT_SOURCE定义的情况下才会有__USE_MISC;相关介绍:https://mzhan017.blog.csdn.net/article/details/122441412;当然这个链接里说的是应用层的_DEFAULT_SOURCE的定义。而这篇的主要目的是对glibc编译使用的_DEFAULT_SOURCE;1。原创 2023-03-08 20:22:44 · 683 阅读 · 0 评论 -
glibc: un.h
chatGPT给出的答案,如果使用的是Linux操作系统,就使用linux/un.h下的文件。如果是其他系统,就是要sys/un.h。这里可能要从特有性来分析了,chatGPT说的没有错误。但是如果软件是兼容多个系统的时候,就需要考虑sys目录下的un.h。所以还是建议使用glibc下的un.h 文件。但是在使用的时候,选择哪一个呢?原创 2023-02-16 15:08:49 · 135 阅读 · 0 评论 -
[ChatGPT] 通过网页给出报告; Good reason to learn english.
ChatGPT 使用经历原创 2023-02-11 09:08:53 · 1956 阅读 · 0 评论 -
glibc: nptl: pthread_attr_init & pthread_attr_destroy;内存泄漏的可能
这里列的两个接口是一对,在上面手册里有说,如果不再需要attr对象,需要使用pthread_attr_destroy,来销毁这个对象。但是如果不详细看,其实看不出来为什么一定要成对使用。这个extension是谁申请内存的呢?搜索glibc的代码会发现,下面这个函数有申请内存给extension。然后上面这个接口的使用手册也是没有提destroy的事情。所以还是有机会出现内存泄漏。所以如果在init和destroy不成对使用时,会有内存泄漏的风险。明显是调用了free释放内存。原创 2023-01-30 20:20:52 · 717 阅读 · 0 评论 -
glibc: pthread: pthread_mutex_lock 返回值的判断,pthread_cond_wait
从上面的使用说明上看,在调用pthread_cond_wait之前,需要确保,mutex已经lock了。如果调用这个函数的时候,不能确定mutex已经lock。可能会出现未定义的行为。潜在会留下一些问题,但是不一定什么时候出现,这就为问题调试埋下了隐患。原创 2023-01-27 16:32:41 · 515 阅读 · 0 评论 -
glibc性能:改进的一个典型案例
这个性能改进的的出发点是。如果可以将pid缓存在当前应用程序的用户空间,就可以避免用户内核空间的交换。会提高一些性能,只是纯碎的做性能提升。但是当将缓存的代码放到正式glibc库之后,因为改动的代码比较基础,后续发现了一些解决不了的问题,最后这个缓存的功能去掉了。当然这种性能的改进方法可以放到用户层,这样就可以避免动基础的代码,但是缺点就是需要没改应用一份代码,代码重复。其实就这个例子来说,是有很多东西可以总结,比如:做优化不是做了就完了,而且需要做大量的,全面的测试。这个函数就会讲pid缓存在应用层。原创 2023-01-06 08:54:54 · 175 阅读 · 0 评论 -
Coredump-X: Race Condition: 多线程 场景2:多线程使用File *fileP
有一个全局变量 FILE *fileP;在一个线程使用的时候,另一个做了close操作,导致 _IO_write_ptr为0,然后出现coredump。原创 2023-01-04 15:01:26 · 176 阅读 · 0 评论 -
glibc: __GLIBC__、 __GLIBC_MINOR__
/* This macro indicates that the installed library is the GNU C Library. For historic reasons the value now is 6 and this will stay from now on. The use of this variable is deprecated. Use __GLIBC__ and __GLIBC_MINOR__ now (see below) when you w原创 2022-12-08 19:08:01 · 315 阅读 · 0 评论 -
glibc: 这个函数是平台定制__syscall_sigreturn;如x86可能就返回 errno=ENOSYS
【代码】glibc: 这个函数是平台定制__syscall_sigreturn;如x86可能就返回 ENOSYS。原创 2022-11-19 22:17:42 · 494 阅读 · 0 评论 -
glibc: __progname/__progname_full,获取程序运行名称;program_invocation_name
这个下面的内容其实很早就有了,一般不这么用。但是知道这个之后,或许可以使用一下,因为程序实际跑的时候,会调用到__init_misc函数。其实就是一个指针,帮我们指向了argv[0]的地址。这段代码的历史很早了,也许_init_misc可以做更多的事情。} }原创 2022-11-15 06:42:15 · 370 阅读 · 0 评论 -
glibc: 编译:MODULE_NAME、IS_IN(libc)
如果glibc的模块编译含有这个MODULE_NAME;就会生成相关的宏定义;原创 2022-11-14 22:35:12 · 223 阅读 · 0 评论 -
Linux:僵尸进程 Zombie;waitpid
do_notify_parent函数里有判断,如果父进程的信号处理对于SIGCHLD的action是IGN,系统会自动回收退出的进程。无需父进程执行wait函数。在进程最终的exit函数里,会将进程的状态置为Exit_zombie的状态。无需考虑这个问题,因为system函数里有调用wait。原创 2022-11-09 06:43:10 · 398 阅读 · 0 评论 -
glibc:corrupt arena;英语单词
在计算机中,这个arena的含义,特指通过brk/sbrk挂载到进程的内存区域,被malloc使用的动态存储空间。Latin harena, arena sand, sandy place,从拉丁语进化来的单词,原意有多沙的地方,沙地。一般在沙地上比武,然后进化成角斗场,舞台。尿沉渣,有沙子的外观,所以叫尿沙。也只是类比,如沙子的形状。一块内存区域,非常若干可用块,类沙,被malloc使用。上面这句的意思就是,在可用块链表里检测到不可能值的时候,报的一个“corrupt arena”:破损内存区。原创 2022-09-16 04:43:04 · 97 阅读 · 0 评论 -
glibc: fgets 使用规范;如果不规范,CPU吃满的一个例子
glibc: fgets 使用规范,返回值一定要判断;原创 2022-08-08 21:45:43 · 168 阅读 · 0 评论 -
Kernel: ksoftirq与pthread_cond_wait 之间的联系
ksoftirq与pthread_cond_wait之间的联系原创 2022-08-04 20:45:42 · 111 阅读 · 0 评论 -
glibc: mprotect: 使用
glibc/kernel,mprotect原创 2022-08-02 22:01:19 · 227 阅读 · 0 评论 -
glibc: -DSHARED编译配置
glibc -DSHARED原创 2022-07-30 17:35:25 · 200 阅读 · 0 评论 -
kernel: glibc: prctl
prctl 使用原创 2022-07-27 05:15:46 · 266 阅读 · 0 评论 -
Coredump-N: C pclose core dump
pclose coredump原创 2022-07-02 10:32:02 · 206 阅读 · 0 评论 -
Kernel:glibc: pthread_create 返回 EPERM (1)错误分析
pthread_create在设置attr->sched_priority时,要注意是否超过limit原创 2022-06-23 14:46:49 · 586 阅读 · 0 评论 -
C++: std::call_once vs atomic
atomic与call_once的选择原创 2022-06-23 08:30:00 · 135 阅读 · 0 评论 -
glibc:编译相关
glibc 编译相关原创 2022-06-07 09:13:13 · 815 阅读 · 0 评论 -
Kernel: WEXITSTATUS/exit内部机制
System 函数会调用到 wait4 系统调用kernel/exit.c/wait4 ->kernel_wait4->原创 2022-06-06 19:50:41 · 651 阅读 · 0 评论 -
C:libc:system 为什么在应用程序里使用这个函数调用命令,而没有执行;PATH
可能的原因是:用的命令格式是 不带全路径的命令执行语句。应用程序在启动时,会有自己的环境运行变量,例如 PATH;如果执行语句里的命令不是绝对路径,那么想应的PATH内容,要可以找到相对于命令的路径。如果在PATH里找不到这个命令,则会返回127。使用exev启动程序时,第3个参数,就是环境变量的设置列表。 execve ((const char *) pathname, (char * const *) &argv_init[0], (char * const *) &env[0])原创 2021-11-28 08:30:00 · 766 阅读 · 0 评论 -
Linux:库函数:libc: glibc
文章目录strdupstrdup#include <string.h>char *strdup(const char *s);作用:申请(malloc)一段内存,将字符串s复制过来,返回新内存的地址。需要将新地址free掉。如果内存不足会返回NULL;The strdup() function returns a pointer to a new string which is a duplicate of the string s. Memory for the new str原创 2021-06-08 06:23:27 · 820 阅读 · 0 评论 -
Coredump-N: getopt库函数coredump
glibc,getopt函数产生coredump的情况。原创 2022-05-21 17:44:54 · 257 阅读 · 0 评论 -
C:glibc:_ISOMAC 这个是什么意思?ISO macro,ISO定义的宏
文章目录解释解释/stdlib/isomac.c这是一个精心设计的程序,用来检查系统头文件中的“非法宏定义”。 什么是非法的宏定义:不是出自实现域内的,例如,没有以下划线开始的不是标准定义的宏。例外情况,就是以E开头的,可能是errno.h里的定义。例外情况,以_MAX 结尾,参考下面的 前缀后缀总结。 In a compliant implementation no other macros can be defined, because you could write stric原创 2021-12-12 22:00:00 · 392 阅读 · 0 评论 -
libc[stdc++]:malloc[new]:hook的实现, 所有的hook函数指针都是弱符号,可以自己手动定义
每个memory相关的函数都会调用到这个函数,但是是单例模式,只要是之前初始化过,就不再初始化。static voidptmalloc_init (void){ if (__malloc_initialized >= 0) return; static voidturn_on_mcheck (void){ mcheck (NULL);}void (*__malloc_initialize_hook) (void) = turn_on_mcheck;ptma原创 2021-12-03 06:20:12 · 840 阅读 · 0 评论 -
glibc: _dl_addr
文章目录问题分析glibc 调用关系问题在调试一个程序的CPU使用率高的案例,发现 _dl_addr 使用比较高;Samples: 895K of event ‘cpu-clock’, Event count (approx.): 223810000000Children Self Command Shared Object Symbol40.34% 39.96% manager libc-2.17.so原创 2021-08-26 16:06:16 · 487 阅读 · 2 评论