Linux
文章平均质量分 80
致守
这个作者很懒,什么都没留下…
展开
-
Linux命令- echo、grep 、重定向、1>&2、2>&1的介绍
echo hello 2>&1 将错误返回值输出到标准1通道,不过该语句正确,没有错误,通道2也就为空,屏幕没有显示,| grep aaa 搜素左边传来的标准输出通道1的结果,通道1有hello 但是没有 aaa 所以没有输出,所以屏幕没有显示。通道2会在屏幕上显示,通道1不会在屏幕上显示,记住这句话,这句话是针对管道的第一个命令,大家别误解了,把管道命令左边命令的通道1的值给右边命令,右边命令再输出,如果正确,输出通道1,错误,输出通道2。同理,> 与 1> 是一样的;转载 2024-08-28 19:49:35 · 333 阅读 · 0 评论 -
Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)
grep命令支持三种正则表达式语法:Basic、Extended 和 Perl-compatible。当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式。要搜索多个匹配模式,可以使用 OR ( alternation )运算符。我们可以用 OR 运算符 |( pipe )指定不同的匹配项,这些匹配项可以是文本字符串,也可以是表达式集。值得注意的是,在所有正则表达式运算符中,这个运算符的优先级是最低的。使用 grep 命令基本正则表达式。转载 2024-08-28 18:40:20 · 720 阅读 · 0 评论 -
一文简述BSD,System V ,POSIX,SUS版本历史, 以及glibc移植的特性测试宏
主要包含C89(1989年最初的ANSI C版本)、C99(1999)、C11(2011)和C17(2017)。多man, 多搜索, 我们将收获更多知识 .一文简述BSD,System V ,POSIX,SUS版本历史, 以及glibc移植的特性测试宏_susv3-CSDN博客。转载 2024-08-26 22:04:21 · 42 阅读 · 0 评论 -
基于epoll的定时器
insert的返回值是个布尔型,意义是新加入的这个定时器是否否比整个set里所有定时器发生的还要早,如果是的话,就必须立刻修改timerfd,将timerfd的定时时间改成这个最近的定时器。,因为一个pair<Timestamp, Timer*>代表着一个时间,如果直接用map<Timestamp, *Timer>只能保证一个时间点下只对应一个Timer*,这不符合要求,所以作者使用了稍微复杂的类型set<pair<Timestamp, Timer*>> 作为存储定时器的容器。转载 2024-08-17 16:53:05 · 40 阅读 · 0 评论 -
_[linux]使用epoll+时间堆实现高性能定时器
包括一个超时时间expire、超时回调函数cb_func以及一个user_data变量,user_data用于存储与定时器相关的用户数据,用户数据可以根据不同的应用场合进行修改,这里实现的是一个智能博物馆的网关,网关接收来自zigbee协调器的用户数据,并为每个用户维护一段等待时间T,在T到来之前,同一个用户的所有数据都存放到user_data的target_list中,当T到来时,根据target_list列表选择一个适当的target并发送到ip_address,同时删除定时器(有点扯远了=。转载 2024-08-17 16:52:05 · 62 阅读 · 0 评论 -
sleep实现原理
pause()函数使该进程暂停让出CPU,但是该函数的暂停是可被中断的睡眠,也就是说收到了中断信号之后处理完毕,再重新执行该进程的时候就直接执行pause()函数之后的语句;可变定时器(variable timer)一般在硬件层面是通过一个固定的时钟和计数器来实现的,每经过一个时钟周期将计数器递减,当计数器的值为0时产生中断。sleep():进程、线程或任务(Linux中不区分进程与线程,都称为task)可以sleep,这会导致它们暂停执行一段时间,直到等待的时间结束才恢复执行或在这段时间内被中断。转载 2024-08-17 16:44:20 · 29 阅读 · 0 评论 -
linux man 1,2,3 命令
这种方式处理小量数据时效率比较高,但是在进行系统调用时,因为用户进程从用户模式进入系统核心 模式,中间涉及了许多额外的任务的切换工作,这些操作称为上下文切换,此类的额外工作会影响系统的执行效率。从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务,函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的。从程序的可移植性的角度来看,相对于系统调用,C语言的标准备函数库(ANSI C) 具备较高的可移植性,在不同的系统环境下,只要做很少的修改,通常情况是不需要修改的。转载 2024-08-17 16:43:19 · 34 阅读 · 0 评论 -
Linux Storage Stack Diagram
工作学习中,没有比图表更好的东西了(虽然很多人在嘲笑PPT),尤其是描述精准的图表。当你想画图说明一个结构或一个流程时,必须对其已经充分理解。而在讲解一张图时,也必须对其有基本的理解。这真的不简单,反正对我来说是这样。关于Linux Storage架构,就有一张描述很精准的图,“Linux Storage Stack Diagram”。这张图总结的实在是太好了,Storage涉及的模块都有描述,让学习者能清晰的了解复杂的系统。本文试图对该图的各部分做个简介,但不会涉及具体的实现。转载 2024-07-08 13:44:33 · 39 阅读 · 0 评论 -
rc.local简介
分别是/etc/rc.local和/etc/init.d/rc.local。2、从注释可以看出该脚本运行在2 3 4 5的启动级别,只能处理start的参数,然后执行start,如果有/etc/rc.local文件的话则执行/etc/rc.local。对应每个启动级别,/etc/目录下都对应一个像/etc/rc5.d/这样的目录,下面是一些脚本,这些脚本基本都是对应/etc/init.d/目录下的软链接,命名里面的数字代表优先级,启动时这些脚本都会执行一遍。把你的程序写在exit 0行的前面就行了。转载 2024-06-28 10:51:59 · 1043 阅读 · 0 评论 -
linux的/etc/rc.local文件(开机自启)
etc/rc.d/rc.local 用于添加开机启动命令/etc/rc.local是/etc/rc.d/rc.local的软连接软连接相当于windows的快捷键打开rc.local文件:在/var/lock/subsys/ 下创建local文件作用:检验rc.local是否执行过,执行过的话就会有local文件(默认没有执行)转载 2024-06-28 10:48:24 · 1570 阅读 · 0 评论 -
Linux 下 segmentation fault(段错误) 总结
我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。才出现了这个堆被破坏的错误。转载 2024-06-14 17:38:32 · 1355 阅读 · 1 评论 -
Linux 下Coredump分析与配置
在Linux下开发中,我们经常听到程序员说我的程序core掉了,通常出现这类的问题是低级bug中的内存访问越界、使用空指针、堆栈溢出等情况。Core就是内存的意思,这个词源自很早以前制造内存的材料,一直延用到现在,当程序运行过程中检测到异常程序异常退出时, 系统把程序当前的内存状况存储在一个core文件中, 叫core dumped,也就。,操作系统检测到当前进程异常时将通过信号的方式通知目标进程相应的错误信息,常见的信号有SIGSEGV,SIGBUS等,默认情况下进程接收到相应的信号都有相应的处理机制。转载 2024-06-14 17:36:42 · 1012 阅读 · 0 评论 -
linux:永久打开core文件功能
(kernel.core_uses_pid控制core文件的文件名中是否添加pid作为扩展,文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间。方式一: 修改/proc/sys/kernel/core_pattern和/proc/sys/kernel/core_uses_pid。转载 2024-06-12 13:01:45 · 348 阅读 · 0 评论 -
Linux系统修改网卡名(eth0-3)
内核启动参数net.ifname,如果在启动参数中增加net.ifname=0,这个文件会在/lib/udev/rule.d/80-net-name-slot.rules体现使用价值,则告诉系统不用scheme的方式来命名,这个时候,会恢复ethx这种不确定性的命名方式;五、 不要用ethX去命名内核在boot 过程是默认使用ethX方式来命名的,每次启动的时候都不确定,启动会后再通过udev等方式去rename,转载 2024-06-08 16:34:51 · 476 阅读 · 0 评论 -
Xshell关闭后仍能后台运行程序的方法
nohup命令可以将程序以忽略挂起信号的形式在后台运行,即使关闭当前的xshell,下次登陆进去的时候也是在运行的。#top的实际使用:进入top命令后,输入数字1指令,表示查看Linux的逻辑cpu个数。输入b,某-列颜色加粗。#按照内存使用情况排序:进入top后,输入大写的M指令,内存使用量,从大到小排序。#top显示进程的绝对路径:top -C#显示进程命令的绝对路径。#设置top命令的刷新次数:top -n 3 #刷新3次后结束。#top指定进程,单独观察动态的资源信息:top -P pid。转载 2024-06-08 10:04:41 · 410 阅读 · 0 评论 -
操作系统(一):2.OS的运行机制和内核、中断、系统调用
而CPU在哪种什么状态才能执行哪种指令。由若干条指令组成的程序段,具有原子性,在执行过程中不可被。OS内核需要运行在内核态,OS的非内核功能运行在用户态。运行在内核态,则非特权指令、特权指令都有权限执行。PS:保护程序计数器PC就是知道原来进行到哪里了。实现操作系统内核功能的那些程序就是内核程序。运行在用户态,则只能执行非特权指令。非特权指令、特权指令都有权限执行。如简单的加减乘除的普通运算指令。清零指令,影响严重,需要高级权限。【分类依据:中断信号的来源】【CPU的两种状态】内核功能与非内核功能。转载 2024-05-31 17:34:39 · 233 阅读 · 0 评论 -
Linux网络编程必备的POSIX API的细节
【代码】Linux网络编程必备的POSIX API的细节。转载 2024-05-30 15:25:33 · 26 阅读 · 0 评论 -
Linux 系统中的 POSIX 接口详细介绍
POSIX 是 Linux 系统中的一组操作系统接口标准,它提供了一套与操作系统无关的接口,使得应用程序能够在不同的 POSIX 兼容系统上编译和运行。POSIX 接口定义了一系列函数、数据类型和常量,这些接口分为不同的模块,涵盖了进程管理、文件管理、网络通信、线程和同步、信号处理等各个方面的功能。在编码过程中,需要包含相应的头文件,并调用相关的函数来实现特定的功能。通过使用 POSIX 接口,开发者可以编写可移植的应用程序,实现系统级别的功能,并且能够在不同的操作系统和平台上进行跨平台开发。转载 2024-05-30 15:24:09 · 403 阅读 · 0 评论 -
Linux的用户接口
功能:设置命令的别名,如果不加任何参数,仅输入alias命令,将列出目前所有的别名设置。如果在执行命令的时候不想按下太多的按键(例如命令pcprofiledump),在输入了 pcprofile 之后,再按下 [Tab] 键的话,那么 bash 马上会自动的将后面的dump接上来。bash执行命令时,不会立刻将命令写入历史命令文件,而是先存放在内存的缓冲区中,该缓冲区被称为历史命令列表,等bash退出再将历史命令列表写入历史命令文件,功能:当 history 命令没有参数,将显示整个历史命令列表的内容。转载 2024-05-30 15:19:58 · 42 阅读 · 0 评论 -
深入理解Linux内存分配
为了写一个用户层程序,你也许会声明一个全局变量,这个全局变量可能是一个int类型也可能是一个数组,而声明之后你有可能会先初始化它,也有可能放在之后用到它的时候再初始化。除此之外,你有可能会选择在函数内部去声明局部变量,又或者为变量动态申请内存。不管你在用户程序中采取哪种方式申请内存,这些都对应着不同的内存分配方式以及不同的数据段,如果再加上代码段,就构成了一个完整的进程。由此可见,一个完整的进程在内存空间中对应着不同的数据区,具体来说,对应着五种不同的数据区:代码段,存放操作指令;数据段,存放已初始转载 2024-05-30 15:13:02 · 628 阅读 · 0 评论 -
为什么Linux下多线程程序如此消耗虚拟内存
最近在进行服务器内存优化的时候,发现一个非常奇妙的问题,我们的认证服务器(AuthServer)负责跟第三方渠道SDK打交道,由于采用了curl阻塞的方式,所以这里开了128个线程,奇怪的是每次刚启动的时候占用的虚拟内存在2.3G,然后每次处理消息就增加64M,增加到4.4G就不再增加了,由于我们采用预分配的方式,在线程内部根本没有大块分内存,那么这些内存到底是从哪来的呢?让人百思不得其解。转载 2024-03-20 13:31:09 · 58 阅读 · 0 评论 -
netcat
说明:该指令将尝试连接traget的20-250,500-600,5990-7000端口;说明:当未指定参数运行netcat时,netcat打印Cmd line提示用户输入命令参数,随后从stdin读取一行内容,并将其分解为参数。1 当netcat接收到入站udp连接时,它会创建一个“连接的套接字”返回到连接的源(udp反向连接回去),然后使用write()发送数据。2 基于这个特性,当客户端中断udp连接后再次连接时源端口发生改变,此时服务端将不再接收连接,除非指定源端口为最初的端口。转载 2024-03-09 17:50:36 · 106 阅读 · 0 评论 -
【深度】韦东山:一文看懂linux对中断处理的前世今生(附免费视频)
本文,4200字,研究代码花了一天,写出来花了一天;录视频估计又得花半天;真怀念以前简单粗暴的生活啊:拿起话筒就录视频,先画好图?那是不需要的文档?那是不存在的真是洒脱.....现在,要写文档,又要画流程图,十几、二十分钟的视频,真是沤心沥血做出来的,各位,别浪费了,欢迎享受。转载 2024-03-04 17:05:38 · 101 阅读 · 0 评论 -
【操作系统】各平台定时器粒度
中,定时器的精度取决于系统时钟的精度。在 Linux 中,可以使用不同的定时器实现,如基于系统调用的定时器(如 setitimer)、基于 POSIX 标准的定时器(如 timer_create)、基于定时器文件描述符的定时器(如 timerfd_create)等。这些定时器实现的精度和使用方式可能有所不同,需要根据具体的应用场景进行选择和使用。需要注意的是,在使用定时器时,定时器的精度可能会受到其他系统资源的影响,如 CPU 占用率、I/O 操作等,因此在实际应用中需要进行充分的测试和优化。转载 2024-02-06 17:55:22 · 423 阅读 · 0 评论 -
Linux中fuser命令用法详解
n:space 指定一个不同的命名空间(space).这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL,例如:只是挂起进程,那么发送HUP信号就可以了。-4:使用IPV4套接字,不能和-6一起应用,只在-n的tcp和udp的命名存在时不被忽略。-6:使用IPV6套接字,不能和-4一起应用,只在-n的tcp和udp的命名存在时不被忽略。-k:杀掉访问文件的进程。转载 2024-01-10 14:34:06 · 518 阅读 · 1 评论 -
linux shell 下各种进制数据转换
printf 命令代码后来我看了,%c, 109, 后面的109是按字符串对待的,只会打印第一个字符'1',这是解释的问题了.作为一个c++程序员,最后我还是选择了与c类似的awk 中的printf 来进行数制转换。这两个就不举例了,其中awk 是基础工具,默认都有安装的, 是一个优秀的文本处理工具。赋值语句 let 或(()) 不能直接用=号,直接用等号是字符串照印。郑重推荐bc 计算器, 它支持交互模式, 可以使得转换根据简单,方便。16 进制输入时 a-f 必需用大写, 小写会被视为变量,会报错。转载 2023-08-25 10:53:52 · 616 阅读 · 0 评论 -
VSCode在win下远程调试linux(cmake)(c/c++)
C://Users/xxx/.ssh/id_rsa.pub拷贝到服务器的~/.ssh/authorized_keys,请不要采用复制粘贴文本的方式,我是用xftp将文件复制到服务 器,再执行如下命令。点击要下载的插件,进入主页点击右侧的 Download Extension 链接,得到下载下来的离线安装包,以 .vsix 为扩展名结尾。通过以下配置,只要源代码改动了,会自动触发cmake 和make ,无需手动编译。(2)配置launch.json 和tasks.json。tasks.json创建。转载 2023-08-08 18:05:51 · 315 阅读 · 0 评论 -
VS Code远程调试Linux C指南
VS Code是微软向开发者提供的一款真正意义上的跨平台编辑器,能运行在Windows、Mac OS、Linux系统上,支持多种开发语言,如C、C++、Python等,具有非常丰富的插件,界面简洁友好。在VS Code菜单栏的“调试(D)”选项选中启动调试,或按下快捷键F5,连接成功的界面如下,可单步运行、设置断点等,和IAR开发软件调试类似,使用起来非常方便。编译一个App的可执行文件,如名称app,编译时应带有“-O0 -g”选项参数,将可执行文件di拷贝到目标机下,如/project/app。转载 2023-08-08 18:01:55 · 392 阅读 · 0 评论 -
posix是什么都不知道,还好意思说你懂Linux?
POSIX 标准的制定最后投票敲定阶段大概是 1991~1993 年间,而此时正是Linux 刚刚起步的时候,这个 UNIX 标准为 Linux 提供了极为重要的信息,使得 Linux 能够在标准的指导下进行开发,并能够与绝大多数 UNIX 操作系统兼容。如今,语言的跨平台的程序都是以这样的方式实现的。但是在不同的平台下,仍需要重新编译。一般地,操作系统为了考虑实现的难度和管理的方便,它只提供一少部分的系统调用,这些系统调用一般都是由C和汇编混合编写实现的,其接口用C来定义,而具体的实现则是。转载 2023-07-29 09:25:27 · 104 阅读 · 0 评论 -
unrecognized relocation (0x2a) in section `.text`
网址为:http://ftp.gnu.org/gnu/binutils/更新之后,重新编译,即可消除此错误。出现这个问题最有可能的原因为。或者重启终端之后,待查看。的时候就会报错,升至。转载 2023-07-21 14:33:46 · 756 阅读 · 1 评论 -
float内存值定义域与浮点值对应表
【代码】float内存值定义域与浮点值对应表。转载 2023-05-24 15:03:38 · 536 阅读 · 0 评论 -
浮点数的表示和精度
double的尾数是52bit,高于32bit的int,所以用dobule表示int不会有精度损失。matlab内部采用double,1+1/2^53对double来说就是1,所以1+1/2^53不会大于1。从表中可以看到,double内部表示的设计是很有规律的,按照对应64位数的顺序依次为 +0、正非规范数、正规范数、正无穷大、符号位为正的NaN、-0、负非规范数、负规范数、负无穷大、符号位为负的NaN。都是 1.xxxxxx * 2^e 表示的,这个 xxxxx 就是底数,1 是省略不写的。转载 2023-05-24 15:03:54 · 4745 阅读 · 1 评论 -
Linux生成core文件相关配置,core文件调试示例
使用ulimit -c命令可以查看当前系统对于core文件的配置,0表示不生成core文件;不为0的数字a表示限制core文件大小不超过a,单位是k;unlimited则表示不限制core文件大小。(2)在/etc/sysctl.conf中添加kernel.core_pattern=core路径;然后执行sysctl -p加载。(1)执行 sysctl kernel.core_pattern=core路径 命令进行修改,重启后失效。转载 2023-04-26 09:03:50 · 3450 阅读 · 0 评论 -
当printf遇上多线程
在操作系统中,一个进程就是一个程序的实例。而线程是进程的最小分割,好比运行一个盖楼房的程序进程,需要各有分工,有的人打地基,有的人刷水泥,有的人搬材料一样。Printf是最基本的一个函数,如何去用,何时能用,大家都要心中有数,才不至于在小沟处翻大船。不过再仔细看看,大部分结果都是不正确的,有时候几个Hello之后才有一个World,有时Hello和World交叉在了一起,变成了HlWelloorHld。一个线程实际上就是一个函数的实例,该线程拷贝了线程函数的代码而执行,所以多个线程可以运行同一个线程函数。转载 2023-04-13 14:43:58 · 535 阅读 · 0 评论 -
muduo网络库:12---C++多线程编程精要之(C/C++系统库的线程安全性
本专题未完结,参阅下一篇文章(线程的创建与销毁的守则)muduo网络库:12---C++多线程编程精要之(C/C++系统库的线程安全性)_mb6128aabee41d4的技术博客_51CTO博客。转载 2023-04-13 14:39:36 · 459 阅读 · 0 评论 -
第十四章 Linux终端设备驱动
硬件缓冲区容量的原因,不是所有的写程序要求的字符都可以在调用写函数时被发送,因此写函数应当返回能够发送给硬件的字节数以便用户程序检查是否所有的数据被真正写入。驱动的这种层次非常类似于面向对象编程中基类、派生类的关系,派生类针对特定的事物会更加具体,而基类则站在更高的抽象层次上。进行的设置,它取决于具体的设备驱动。参数中,若新旧参数相同,则什么都不需要做,对于被改变的设置,需完成硬件上的设置,代码清单。驱动的列表,包括驱动名、缺省的节点名、驱动的主编号、这个驱动使用的次编号范围,以及。转载 2023-04-05 23:59:03 · 362 阅读 · 0 评论 -
Linux 条件变量使用细节(为何调用 pthread_cond_wait 前加锁,函数内部解锁,返回时又加锁)
对于 2,只要在 pthread_cond_signal 之后与解锁 mutex 之间有其他语句需要执行,那么由于 mutex 在这时已经被这个线程锁,还没有解锁,所以调用 pthread_cond_wait 的那个线程在pthread_cond_wait 返回前的锁 mutex 的行为就会阻塞,直到 pthread_cond_signal 后的语句执行完解锁,pthread_cond_wait 才会返回。pthread_cond_signal 唤醒的是阻塞在 pthread_cond_wait 的进程。转载 2023-03-20 12:59:56 · 1122 阅读 · 0 评论 -
左值和右值
在探讨c++11中的Move函数前,先介绍两个概念(左值和右值)转载 2023-03-15 20:26:50 · 225 阅读 · 0 评论 -
C++ 之 std::move
当然并不是,我自己总结了一下,如果你的类或者结构体中所有的成员都已经实现了std::move 语义,并且没有自定义析构函数(还没有搞清楚为什么有自定义的析构就不行), 那可以不用显式提供,编译器会自动有一个。标准模板库的 std::string, std::vector,std::map ,std::shared_ptr等等都自己实现了move 语义。上面的函数参数是值传递,一般对于标准数据类型,会采用值传递,对于复杂类型,结构体,类对象等并不会用值传递,因为会多一份对象的拷贝。这句代码是调用了转移构造。转载 2023-03-15 20:20:50 · 673 阅读 · 0 评论 -
基于C++11的线程池(threadpool),简洁且可以带任意多的参数
原文地址 :咳咳。C++11 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等。线程池(thread pool)这个东西,在面试上多次被问到,一般的回答都是:“管理一个任务队列,一个线程队列,然后每次取一个任务分配给一个线程去做,循环往复。” 貌似没有问题吧。但是写起程序来的时候就出问题了。废话不多说,先上实现,然后再啰嗦。转载 2023-03-15 20:21:03 · 1583 阅读 · 0 评论