▲ Linux应用开发、shell、多线程、gdb
文章平均质量分 70
以实战为线索,图文并茂的讲解Linux应用层开发中常用到的一些技术,包括开发中遇到的问题以及对应的解决方案。专栏中的文章是作者多年来的工作实战总结,每一篇文章都经过多次修改才得以发布出来。
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
内核之道
某大厂资深技术专家,精通PostgreSQL内核、专注于『NVR、AI超脑、智能应用服务器』开发
展开
-
LD_LIBRARY_PATH 有什么用?
文章目录1. 什么是环境变量2. 使用LD_LIBRARY_PATH变量3. LD_LIBRARY_PATH的问题3.1 使用 LD_LIBRARY_PATH 面临的一些问题3.1.1 安全性3.1.2 性能3.1.3 不一致4. 解决方案4.1 如何避免LD_LIBRARY_PATH5. 结论1. 什么是环境变量其值由操作系统或微服务能力决定的变量称为环境变量。环境变量是一个动态指定的值,可以影响正在运行的计算机进程的行为。进程在进程环境的组件中执行。首先,环境变量是为UNIX开发的,但现在Wi原创 2021-11-23 20:15:13 · 250 阅读 · 0 评论 -
【0239】从编译原理角度理解 #include “xxx“ 或 #include<xxx> 的实现机制
C/C++开发中,通常将函数的声明、数据类型声明等放在xxx.htest.h),然后将函数的实现放在对应的xxx.ctest.c当我们在.c源文件中之后,此.c文件中会增加什么内容?编译器背后会做些什么?本文将从编译器(预处理阶段)角度,详细讲解之后,xxx.c源文件的内容分布,以及实际项目开发中与此类相关的常见报错,及其对应解决方案。原创 2023-11-27 20:27:44 · 144 阅读 · 0 评论 -
C/C++语言判断字符串是否全中文/包含中文
【代码】C/C++语言判断字符串是否全中文/包含中文。原创 2023-06-30 16:12:52 · 1442 阅读 · 0 评论 -
【0177】POSIX Semaphores(信号量)实现机制
在计算机科学中,信号量(`semaphores` )是一种变量或抽象数据类型,用于控制多个进程对公共资源的访问,并避免并发系统(如多任务操作系统)中的临界区问题。普通(*trivial*)信号量是一个普通变量,它根据程序员定义的条件进行更改(例如,递增或递减,或切换)。原创 2023-03-04 20:43:29 · 757 阅读 · 0 评论 -
【0159】Linux下利用getrlimit()、setrlimit()分别获取/设置资源限制
中,详细讲解了Linux系统对于每个进程的资源限制(软限制于硬限制)管理机制。软限制是内核对相应资源强制执行的值。硬限制充当软限制的上限:无特权进程只能将其软限制设置为从。到硬限制的范围内的值,并且(不可逆转地)降低其硬限制。)设置shell的资源限制。shell的资源限制由它为执行命令而创建的进程继承。每个资源都有一个相关联的软限制和硬限制,由。它可用于设置和获取任意进程的资源限制。能力的进程)可以对任何一个限制值进行任意更改。来分别获取/设置系统的资源限制。创建的子进程继承其父进程的资源限制。原创 2023-01-03 18:07:22 · 752 阅读 · 0 评论 -
【0109】Linux系统监测工具sysstat介绍
sysstat实际上是一个工具箱,这其中包含了好几个工具。原创 2022-11-21 11:40:04 · 1020 阅读 · 0 评论 -
【0143】 System V共享内存(Shared Memory)
如果shmaddr不为 null 并且在shmflg中指定了SHM_RND,则共享内存段附加在向下舍入到最接近的SHMLBA倍数的地址处,其中SHMLBA代表段低边界地址。共享内存是最快的进程间通信机制。如果没有与给定键对应的现有共享内存段,并且在shmflg中指定了IPC_CREAT标志,则会创建一个新的共享内存段。在共享内存的情况下,共享内存段由内核创建并映射到请求进程的地址空间的数据段。与消息队列和信号量一样,共享内存也有两种类型,传统的 System V 共享内存和较新的 POSIX 共享内存。原创 2022-11-18 20:32:23 · 656 阅读 · 0 评论 -
【0107】为什么二进制文件不显示为 0 和 1?
我们常用的工具hexdump没有二进制选项,但是xxd有。原创 2022-11-15 08:10:37 · 536 阅读 · 0 评论 -
【0108】C++ 并发编程(从C++11到C++17)
自C++11标准以来,C++语言开始支持多线程模型。借助多线程模型,我们可以开发出更好的并发系统。本文以C++语言为例,讲解如何进行并发编程。并尽可能涉及C++11,C++14以及C++17中的主要内容。原创 2022-11-15 07:58:55 · 335 阅读 · 0 评论 -
【0125】详聊Linux下文件锁
但是,当一个进程对文件有写锁时,在它被放弃之前,没有其他进程可以激活读锁或写锁。考虑这一点的一个简单方法是,可以同时有多个读者,但一次只能有一个作者。文件锁定的目的是锁定当前进程即将读取(分别写入)的文件的某一段(有时称为记录,但指的是字节范围),以防止其他进程写入(分别。可以看到,该函数的功能是非常强大的,“咨询记录锁”是本节的重点,下面将详细讲解如何利用该特性对文件上锁。名称后面的括号中表示(在大多数情况下,所需的类型是int,我们使用名称。在Unix系统中,锁定文件的方法有很多种。原创 2022-10-11 15:32:28 · 783 阅读 · 0 评论 -
【104】mongocxx_3.6.7error: no matching function for call to ‘mongocxx::v_noabi::pool::entry::entry()’
编译,得到和这两个动态库。将这两个动态库拷贝到自己项目中,同时将include/目录下的bsoncxx/和mongocxx/这两个目录下的头文件同步更新到项目中。原创 2022-08-29 20:10:53 · 293 阅读 · 0 评论 -
【103】libicuuc.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8‘
编译驱动库,执行make -j命令,当进度到达97%的时候,终端收到报错信息,提示:。原创 2022-08-11 14:11:20 · 1324 阅读 · 0 评论 -
【102】libmongoc-1.0.so.0: undefined reference to `u_strFromUTF8_71‘、`usprep_openByType_71‘
在CentOS环境上面通过源码编译的方式来安装和。在将、libbson.so、和warningerrorMakefile312。原创 2022-08-01 20:47:46 · 359 阅读 · 0 评论 -
【101】libmongoc-1.0.so.0: undefined reference to `snappy_max_compressed_length‘, `u_strFromUTF8_71‘,
在CentOS环境上面通过源码编译的方式来安装和。在将、libbson.so、和warningwarningerrorMakefile312make。原创 2022-08-01 20:33:19 · 243 阅读 · 0 评论 -
【100】protobuf 3.21.3报错:undefined reference to `control::XXX::XXX(google::protobuf::Arena*, bool)‘
1.问题描述。原创 2022-07-25 15:56:46 · 844 阅读 · 0 评论 -
【099】collection.hpp: error: ‘const class mongocxx::v_noabi::bulk_write’ has no member named ‘begin’
1.概述。原创 2022-07-25 11:36:10 · 199 阅读 · 0 评论 -
【098】Linux下安装mongo-cxx-driver-3.6.7驱动的详细过程,以及常见报错解决
1.mongo-cxx-driver概述。原创 2022-07-17 23:07:14 · 599 阅读 · 0 评论 -
【0097】linux编译libzookeeper_mt.so,Zookeeper版本是 release-3.5.10
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。在旧版本的zookeeper中编译libzookeeper_mt.so动态库的时候,解压文件后,直接使用./configure和make等命令就可以编译得到该动态库。但是新版本的Zookeeper,其源码编译方式已经改变了,下面就详细来讲解一下最新版本的Zook原创 2022-07-13 14:36:31 · 560 阅读 · 0 评论 -
【0096】linux编译OpenSSL库报错:undefined reference to symbol ‘SSLv23_client_method@@OPENSSL_1.0.0‘
OpenSSL是用于传输层安全 (TLS) 协议(以前称为安全套接字层 (SSL) 协议)的强大、商业级、功能齐全的开源工具包。协议实现基于全强度通用密码库,也可以单独使用。openSSL最新的版本是openssl-3.0.4。其下载地址是:https://github.com/openssl/openssl/releases/tag/openssl-3.0.4。...原创 2022-07-13 14:28:49 · 1621 阅读 · 0 评论 -
【0095】mongo-c-driver-1.18.0编译安装提示libmongoc-1.0.so.0.0.0:undefined reference to `BIO_meth_set_create`
编译时,在安装进度为73%左右的时候失败,其错误提示信息如下:原创 2022-07-11 12:04:38 · 342 阅读 · 0 评论 -
【0094】CMake安装过程中,gmake报错:[ 45%] Linking C,lib/libcmcurl.a(sha256.c.o): In function `my_sha256_init‘:
最近在安装mongo-cxx-driver驱动的时候,由于设备的CMake版本较低,因此,需要先对设备上目的CMake进行升级。但是在执行(或)的时候,报错了,详细详细如下:[ 45%] Linking C executable curltest lib/libcmcurl.a(sha256.c.o): In function `my_sha256_init’:...原创 2022-07-05 19:15:50 · 1090 阅读 · 0 评论 -
【0093】(.text+0xb29): undefined reference to `mxml_format_cb‘
Mini-XML是一个微型XML库,您可以使用它在应用程序中读取和写入XML和类似XML的数据文件,而无需大型非标准库。Mini-XML 只需要一个 ANSI C 兼容的编译器(GCC 可以工作,大多数供应商的 ANSI C 编译器也是如此)和一个make程序。Mini-XML 提供以下功能:(1)读取UTF-8和UTF-16并写入UTF-8编码的XML文件和字符串。(2)数据存储在链表树结构中,保留XML数据层次结构。(3)SAX(流式)读取XML文件和字符串以最小化内存使用。(4)支持任意元原创 2022-07-04 20:31:39 · 151 阅读 · 0 评论 -
【0092】undefined reference to symbol ‘SSLv23_client_method@@OPENSSL_1.0.0‘
最近在升级OpenSSL库的时候,遇到了报错信息:尝试过很多的方案,包括编译时候添加许多相关的选项参数,然而最终都以失败而告终。通过再三研究,最终解决了这个问题,现在把其解决方案分享给大家。...原创 2022-07-04 20:16:51 · 895 阅读 · 0 评论 -
【0091】你的进程最多能打开多少个文件描述符fd?
在Linux下进程与线程一文中,我通过约万字的长文详细地描述了Linux下进程相关的概念:包括内核中进程组织形式、进程的状态、进程调度、进程与线程区别、僵尸进程等等。此外,还附加说明了Linux内核对每个进程()的资源限制,包括软限制和硬限制。在软限制中给出了该进程的最大打开文件句柄数量、消息队列数量、栈大小、文件大小等。为了验证这个资源限制的有效性,我们现在用一个演示用例来验证单个进程所能够打开的文件描述符的最大数量限制是否真如给出的结果保持一致。原创 2022-04-08 16:12:39 · 536 阅读 · 0 评论 -
《GNU make v3.80》阅读记录
1. Makefile中可以使用shell所提供的任何命令2.书写Makefile时,一个较长行可以使用反斜杠(\)分解为多行,但是反斜杠之后不能有空格3.Makefile把那些没有任何依赖,只有执行动作的目标称为“伪目标(phony targets)”4.make任何工作...原创 2019-07-02 09:41:34 · 206 阅读 · 0 评论 -
GUN make的选项
以下为GNU make中所有可供选择的选项:用法:make [选项] [目标] ...选项: -b, -m 忽略兼容性。 -B, --always-make 无条件 make 所有目标。 -C DIRECTORY, --directory=DIRECTORY 在...翻译 2018-10-05 19:13:55 · 553 阅读 · 0 评论 -
make报错:error: unable to find string literal operator ‘operator““fmt’ with ‘const char [12]’, ‘long u
1. 在X86架构的CPU上编译是ok的,没有警告,没有报错;然后移植到ARM64架构上编译时候,就报错了。2. C++11要求,当字符串跟变量连接的时候,必须增加一个空格才行。因此解决方案有2个:(1) Makefile文件明确告知编译方式采用C++98:CFLAGS += -std=c++98(2)采用控制宏方式:#if __cplusplus < 201103L #d...原创 2019-07-02 11:17:21 · 5056 阅读 · 0 评论 -
【0045】 词法分析器lex工作原理
文章目录1. 编译器概述2. 1. 编译器概述 《编译原理》第2版一书中对编译器的概念作了简要说明。所谓“编译器”,它是指这样的一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的、用另外一种语言(目标程序)编写的程序。 其示意图如下所示。在这里编译器类似一个黑盒子,扮演着将源程序翻译为目标程序的角色。 当然,源程序模块内部将会有大量的其他操作。大致上可以分为两个部分:分析部分(编译器的前端)和综合部分(编译器的后端)。在分析部分中,主要负责将原创 2022-02-15 15:06:58 · 532 阅读 · 0 评论 -
虚拟存储器与TLB
文章目录1. 概述2. 虚拟页号3. 虚拟存储器1. 概述主存也可以为通常由磁盘实现的辅助存储器充当cache,这项技术被称为“虚拟存储器(Virtual Memory)”。一种将主存用作辅助存储器高速缓存的技术。构造虚拟存储器的两个主要动机:(1)允许在多道程序之间有效而安全地共享存储器。它使得我们更有效地共享处理器和主存。(2)消除一个小而受限的主存容量对程序设计造成的影响。40年后,第一条成为主要设计动机。虚拟存储器实现程序地址空间到物理地址(Physical Address,主存储器的地原创 2022-01-24 10:55:08 · 277 阅读 · 0 评论 -
Linux内核之虚拟文件系统(VFS)
文章目录1. 虚拟文件系统1. 虚拟文件系统原创 2022-01-20 16:47:35 · 916 阅读 · 0 评论 -
Linux内核之中断
文章目录1. 什么是中断1.1 中断和异常 2. 中断处理程序1. 什么是中断1.1 中断和异常 2. 中断处理程序原创 2022-01-19 21:17:27 · 424 阅读 · 0 评论 -
【Shell实战】· chattr命令创建不可修改的文件
文章目录1. 关于chattr命令2. 实战练习2.1 将文件设置为不可修改状态2.2 1. 关于chattr命令chattr命令可以将Linux设备上面的文件设置为不可修改、删除等特性,该命令支持的详细参数列表如下所示:[root@node101128 distill_info]# chattr --helpUsage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...以下是各参数的详细功能:a111A111c111原创 2022-01-05 20:20:12 · 674 阅读 · 0 评论 -
【008】Linux2.6 完全公平调度算法(CFS)
文章目录1. 概述2. Linux调度器的简史3. CFS概述4. CFS内部结构5. CSF和优先事项1. 概述Linux调度器在竞争压力下是一个有趣的研究。一方面是应用Linux的使用模型。虽然Linux最初是作为桌面操作系统的实验开发的,但现在您可以在服务器、微型嵌入式设备、大型机和超级计算机上找到它。毫不奇怪,这些域的调度负载是不同的。另一方面是在平台上取得的技术进步,包括架构(多处理、对称多线程、非均匀内存访问[NUMA])和虚拟化。这里还包含了交互性(用户响应性)和整体公平性之间的平衡。从这原创 2022-01-05 11:58:14 · 1127 阅读 · 3 评论 -
Linux系统下进程与线程
注意,程序不等同于进程,进程是正在执行中的程序以及相关资源(如程序计数器PC、打开的文件描述符、挂起的信号、处理器状态、寄存器状态、内核数据、临时数据堆栈等)的总称,而程序只是存储在某种介质上(如磁盘)的一组机器机器代码指令和数据。而进程是资源的基本单位。线程是进程执行操作的最小单位,也是处理器调度和分派的基本单位,它是进程的一个实体。进程是具有一定独立功能的程序在数据集上的动态执行过程,它是操作系统中资源分配和调度的独立单元,是应用程序的载体,每个进程都有自己独立的内存空间,每个进程内存地址彼此隔离。原创 2021-08-18 13:32:00 · 391 阅读 · 0 评论 -
【0149】System V IPC之消息队列(Message Queue)
1. 概述。原创 2021-11-30 14:23:07 · 1207 阅读 · 3 评论 -
详谈ELF文件格式原理(一)
文章目录1. 概述2. 可执行文件是什么1. 概述 本来是准备写一系列关于进程的内存管理、映射过程、堆、栈空间管理以及垃圾回收机制等相关文章,但是在“进程的内存空间布局”这个话题里,如果不清楚可执行文件的格式和底层布局,那么对进程如何加载内存、进程的内存空间布局等理解会带来一些困难。因此,我们先对UNIX平台上面的可执行文件的格式(即可执行文件的内部是如何组织数据)先进行详细的分解,然后再继续深入有关内存的话题。2. 可执行文件是什么 众所周知,当操作系统运行某个程序时候,它必须先将程序原创 2021-06-10 12:43:30 · 412 阅读 · 2 评论 -
Linux之系统调用
文章目录1. 概述1. 概述通常情况下,Linux系统程序设计主要是指利用标准库(比如C语言的glibc标准库)进行工作。其中标准库提供了各种基本函数,用于开发应用程序。当然,这里的系统程序设计开发不仅仅是指C语言,它还可以是C++、Java、Pascal等等,只不过相对而言,通常都会选择使用C/C++进行Linux系统应用程序开发。一方面,UNIX内核使用C语言开发;毫无疑问,选择C语言进行应用程序开发将会;其次,C语言...原创 2021-10-29 15:08:05 · 146 阅读 · 0 评论 -
Gdb调试多线程死锁
一、操作系统中有一个进程表,它记录了当前系统上所有进程的状态信息。一般是Sleep或Run。这里涉及到Linux下进程的状态信息。线程与进程类似,只是线程所占用的内存空间比进程更少。二、非抢占线程系统和抢占线程系统异同三、Gdb调试线程常用命令info threads 列出当前所有线程的信息thread tid 切换到线程tid中去(比如当tid=1,表示切换到线程1中)break 1...原创 2019-05-29 17:40:41 · 2336 阅读 · 0 评论 -
gdb断点属性
1. gdb中的每个断点都有着属于自己的属性信息,比如断点标识符,当前状态(禁用中?启用中?),以及其断点所处的位置行号等。可以看到每个断点信息都有如下几个共有的属性:Num Type Disp Enb Address What.下面对每个字段的功能作一个详细的解析。Num(标识符) 断点的唯一标识符,用来记录和区别每个断点Type(类型) 该字段指出当前断点是属于:断点、监视点还是捕获...原创 2019-03-08 09:27:53 · 610 阅读 · 0 评论 -
Posix多线程?仅需此文就够了
文章目录1. 线程总数异步2. 同步的若干种实现1. 线程总数异步 1线程总数异步的。所谓线程安全是指:“代码能够被多个线程调用而不会产生灾难性的结果,它不要求代码在多个线程中高效地运行,只要求能够安全的运行”。实现线程安全有以下几种方式: (1) 简单粗暴方式: 利用Pthreads提供的工具: 互斥量、条件变量和线程私有数据,实现线程的安全。即通过整个函数的调用的串行化来...原创 2020-05-06 21:25:57 · 416 阅读 · 0 评论