![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 56
KingOfMyHeart
会好起来的.
展开
-
写在脚本中export不生效
写了一个脚本,内容大致如下,set_ld_path.sh:project_lib_path=../lib/export LD_LIBRARY_PATH=$project_lib_path:$LD_LIBRARY_PATH将上面代码写在了脚本中,目的是指定动态库加载路径,执行脚本未生效。由于执行脚本会产生子进程,父子进程执行指令后,子进程结束返回到父进程,export的变量在父进程中不生效,所以,export不能再子进程shell中执行纠正:source ./set_ld_path.sh:原创 2022-03-27 21:04:49 · 2478 阅读 · 0 评论 -
IO多路转接之poll函数解析
函数原型:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);返回值:ret > 0 ,表示有事件发生的文件描述符的个数,可以去遍历fds,看哪个fd发生事件,并且根据对应的revent做下一步处理ret == 0,表示超时,且还没有事件发生ret<0,表示失败,可以根据全局变量errno来判断下一步的动作参数解析:struct pollfd *fds:是一个数组,将所有原创 2021-05-09 14:33:27 · 327 阅读 · 0 评论 -
复习补充一点系统调用实例
内核中的数据不能随意调用,不能随意jmp,毕竟操作系统是帮我们管理资源的,要不然我们还要操作系统做甚。//用户态int main(){ open(/* ..... */); //库函数 return 0;}----------------------------------------//内核态sys_open(/* ...... */){ //do something}如何做到不让用户随意访问内核数据或函数:依赖硬件设计主要原因是将内存大概分割为用户态和内核态。CPL DPL原创 2021-04-26 21:49:16 · 566 阅读 · 0 评论 -
linux设置can和vcan
启动can0:sudo ip link set can0 type can bitrate 500000sudo -S ip link set can0 type can bitrate 500000sudo ip link set can0 upsudo -S ip link set can0 up启动can1:sudo ip link set can1 type can bitrate 500000sudo -S ip link set can1 type can bitrate 500原创 2021-04-20 22:34:22 · 1588 阅读 · 0 评论 -
Linux下利用dlopen()+dlsym()实现单元测试中系统调用的mock(2)
还有一种情况,一些系统调用所在的库并不在默认的路径或者调用定义不在默认的库中,此时需要我们指定库的查找路径和库名称,比如mock rt库中的系统调用,具体查看以下代码:#include <dlfcn.h>#include <time.h>const std::string rt_path = "/usr/lib/x86_64-linux-gnu/librt.so";void *create_handler = NULL;// mock timer_createtyped原创 2020-06-24 15:47:36 · 346 阅读 · 0 评论 -
socketcan
参考<<Linux_Can编程详解>>CAN原理介绍: https://www.cnblogs.com/spoorer/p/6649303.html一.初始化工作SocketCAN 中大部分的数据结构和函数在头文件 linux/can.h 中进行了定义。 CAN 总线套接字的创建采用标准的网络套接字操作来完成。网络套接字在头文件 sys/socket.h 中定义。...原创 2020-05-06 19:59:59 · 1796 阅读 · 0 评论 -
likely()和unlikely()
define likely(x) __builtin_expect(!!(x), 1)define unlikely(x) __builtin_expect(!!(x), 0)ikely(x)宏传入__builtin_expect(!!(x), 0)的第一个参数为!!x,这样写是因为__builtin_expect的第一个参数需要为long型,而我们如果想传入指针或字符串类型,则需要使用!!x...原创 2019-07-16 15:31:37 · 3062 阅读 · 0 评论 -
linux下使用system函数产生新进程
1.vfork原创 2019-07-18 11:12:23 · 1905 阅读 · 0 评论 -
进程间通信机制(一)管道
一、基础概念:linux下进程间通信:IPC常见的IPC方法:1.管道:有名管道(用于非血缘关系进程)和匿名管道;2.信号:3.共享内存:也叫共享映射,用于非血缘关系进程4.套接字为什么要进程间通信:因为每个进程都有自己独立的地址空间,二、管道的概念:...原创 2019-05-18 17:08:33 · 431 阅读 · 0 评论 -
文件描述符(多进程对同一个文件操作)
进程描述符:filedescrption,包含很多执行file结构体的指针当我们打开一个文件的时候:int fd = open();返回的fd对应着一个结构体,file_struct{ ... }内核中文件结构体中的内容:struct file { union { struct list_head fu_list; struct rcu_head fu_rcuhead;...原创 2019-05-18 09:22:43 · 5957 阅读 · 2 评论 -
操作系统运行环境之CPU状态与中断/异常处理概念与原理机制
文章中图片来源于网络,侵权告删。一、处理器的状态基础(也叫模式)1.CPU = 控制器 + 运算器 + 寄存器 + 高速cache2.寄存器的分类:用户可见寄存器:由高级语言编译器优化算法分配使用,为减少访问内存的次数控制和状态寄存器:用于控制处理器的操作,通常由操作系统代码使用(这是我们关注的重点)二、控制和状态寄存器:作用:用于控制处理器的操作,如PC控制CPU执行哪条指令;...原创 2019-05-13 17:31:40 · 6102 阅读 · 2 评论 -
IO复用之select
最初,在接触网络编程时,无论是多进程还是多线程,我们都会把服务器与用户的交互以及服务器对客户端动态的监控放在一起.拿多原创 2019-07-22 22:08:05 · 192 阅读 · 0 评论 -
僵尸进程孤儿进程以及守护进程
一.僵尸进程描述一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。如何产生一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个...转载 2019-08-06 09:05:51 · 447 阅读 · 0 评论 -
阻塞非阻塞同步异步调用方式以及五种IO模型
一.阻塞与非阻塞阻塞在网络通信中,我们会调用read,recv等函数去读取网络中发来的数据,数据先会来到内核的TCP缓冲区中,然后再将数据从内核拷贝到用户的buff中,当缓冲区中没有数据时,read默认会阻塞,也就是将整个进程挂起,等到数据的到来,直到数据就绪,才会被唤醒继续执行;包括send,send做的工作是将数据从user拷贝到kernel,但是有时内核缓冲区没有足够的位置,也会发生...原创 2019-08-01 18:54:40 · 753 阅读 · 0 评论 -
线程属性详解
一、线程的意义:实现真正的并发;有一些情况下会产生阻塞,我们可以将阻塞放到某个线程中,保证我们程序整体可以继续向下执行;对于一些计算密集的任务,我们可以专门开启一个线程去执行。二、再分析创建线程函数 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr...原创 2019-07-28 19:16:26 · 1248 阅读 · 0 评论 -
select's code
#ifndef __WRAP_H_#define __WRAP_H_void perr_exit(const char *s);int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr);int Bind(int fd, const struct sockaddr *sa, socklen_t salen);int Conn...原创 2019-07-28 19:52:19 · 245 阅读 · 0 评论 -
信号量
信号量 :可以理解为一种临界资源的计数器,一般将信号量设置为>0的值表示该资源还要几个可以直接用 对应的操作还要是PV操作其中p代表可用资源-1 v代表可用资源+1临界区:用来访问或者操作临界资源的代码信号量集:包含多种临界资源的,对多种临界资源进行描述。模拟一个信号量的基本操作: (玩具代码)//Sem.hUnion semun{ Int val;//信号量初始值}...原创 2019-08-10 20:02:37 · 692 阅读 · 0 评论 -
Linux常见上下文切换---理论篇
文章图片来源网络,侵权联系删除.一、CPU上下文:PC寄存器:存放着CPU正在执行的指令或者CPU将要执行的指令;其他寄存器,CPU身边速度极快的内存,保存着其他重要的信息。CPU上下文切换:由于任务(进程、线程或者中断)在CPU上执行时宏观看上去所有进程都在执行,实际上任务不可能独占CPU,是需要遵守CPU的调度算法,这个过程中任务是要不停的换进换出,而上下文指的就是这个某个任务执...原创 2019-08-24 16:16:12 · 797 阅读 · 0 评论 -
Linux内存管理基础---pt、je、tc三种不同malloc版本简介、内存优化思路、伙伴系统简介
一、x86 Linux 32位系统虚拟地址空间布局:这里的段基址从0开始,可以访问管理的内存是4G;如果是段基址是从2G开始的,那么内存可以达到6G.Linux进程使用内存的几种类型:初始化数据段、未初始化数据段;栈(局部变量、临时变量)esp、rsp;堆(动态申请)紧贴数据段;内存映射段。其中:初始化数据段、未初始化数据段、栈的内存使用由编译器和连接器控制;堆和内存映射...原创 2019-08-25 21:47:26 · 1727 阅读 · 1 评论 -
clone()
clone是Linux为创建线程设计的(虽然也可以用clone创建进程)。所以可以说clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等。clone函数功能强大,带了众多参数,它提供了一个非常灵活自由的常见进程的方法。clone可以让你有选择性的继承父进程的资源,你...原创 2019-05-17 16:32:47 · 2326 阅读 · 0 评论 -
fork()
fork():sys_fork()系统调用 fork() 通过 sys_fork() 进入do_fork()时,其clone_flags为 SIGCHLD,也就是说,所有的标志位均为0,所以copy_files(),copy_fs(),copy_sighand()以及copy_mm()全都真正执行了也就是这四项资源全都复制了,linux32位上的3G地址空间都被子进程复制子进程拥有了父...原创 2019-05-17 16:23:49 · 228 阅读 · 0 评论 -
动态库和静态库
库:提前写好的一些函数的集合,是一种二进制文件动态库:又叫共享库动态库是一种可执行文件,文件后缀为.DLL(windows)或者 .so(linux),动态库存放在系统某个特定的位置,所有进程都可以共享或者引用这一份代码中的内容。实际上,每个程序运行起来,在它的虚拟地址空间上栈的附近有一部分是分配给共享库的。(参照前面的文章,程序的编译链接过程)动态库的特点:1.存放在系统特定位置,...原创 2019-04-17 09:30:52 · 722 阅读 · 0 评论 -
linux命令复习(用户文件权限、root、组管理、用户管理与设置、which、su、修改文件权限)
用户权限的相关命令:权限类型:01 读 read r 402 写 write w 203 执行 excute x 1组权限:开发组:将所有开发人员添加到一个组中,这个组中所有人就有相同的权限我们可以使用ls -l查看文件的详细信息,就可以查看文件的权限**硬链接:**即就是有多少种方式路径,可以访问到当前的目录或者文件对于文件来说:我们通过绝对路径可以访问到该文件...原创 2019-04-10 08:04:30 · 4187 阅读 · 14 评论 -
volatile
volatitle的作用:1.防止编译器对汇编指令进行顺序上的优化,否则会带来意想不到的结果;2.防止寄存器存储变量的副本值。(主要应用在多线程中)(防止多个线程对同一个变量进行缓存,使得多个线程每次去这个变量的内存中去取,保证变量修改的“实时性”,保证程序的确定性,需要注意是,每次取变量的时候还需要进行互斥访问的设置)...原创 2019-04-12 17:31:18 · 178 阅读 · 0 评论 -
linux复习系统相关(关机,查看网卡配置、ssh、不同系统间的文件传输)
1shutdown 选项 时间选项:关机/重启两个选项 -r 表示重启 默认是关闭电脑时间:不指定时间会在一分钟内关闭shutdown -r now:表示立即重新启动shutdown:不加参数,默认是一分钟后自动关机shutdown 20:30 :表示20:30自动关机shutdown +10 :10分钟后自动关机2.网卡和ip地址(网卡是负责计算机通讯的硬件,网...原创 2019-04-08 22:08:24 · 310 阅读 · 0 评论 -
linux命令复习总结(文件增删改查、搜索过滤、输入输出重定向、管道)
ls选项: -a :显示目录下的所有子文件,包括隐藏文件(.开头的文件)(隐藏文件一般是保存安装过的软件的配置的,不需理会)-l :以列表的形式显示文件的详细信息-h:需要配合-l选项配合使用 ls -lh, 包括会给文件大小带个单位,更具体ls和通配符搭配:通配符:* 代表任意个数 个字符,如果*在最后,则包括了所有类型的文件,如果在最前面,则需要我们手动的添加文件类型,示例如...原创 2019-04-08 18:58:39 · 1491 阅读 · 1 评论 -
程序的编译链接过程复习
本文将以下面代码为例说明问题:在这里插入代码片1.虚拟内存的概念程序的加载过程:磁盘 ——> 内存——> cpu加载什么东西:指令 (instructions)+ 数据(data)...原创 2019-04-11 16:38:37 · 393 阅读 · 0 评论 -
在虚拟机安装ubuntu18.04以及相应环境配置
一时兴起,安装个图形化界面的linux玩一玩,废话不多说,说一下安装和配置过程。一、安装工具准备1.unbuntu镜像一份2.VMare虚拟机软件这里说一下为什么要用虚拟机:1):我们不需要准备其他的电脑,更不要去装什么双系统2):虚拟机中可随意操作,大胆尝试,支持快照功能,可一键回退。二、下载安装包1)访问ubuntu官网下载:https://www.ubuntu.com/do...原创 2019-04-06 15:33:01 · 2717 阅读 · 0 评论 -
linux系统命令复习(查看日期、监视磁盘目录、监视进程信息、find查找文件、软链接、打包压缩、软件安装)
查看服务器的系统日期时间、磁盘空间占用情况、程序执行情况1)时间和日期date显式当前的日期和时间cal显式当前月份的日历#当前的日期king@ubuntu:~$ dateWed Apr 10 13:40:45 +08 2019#显式当前的月份的日历king@ubuntu:~$ cal April 2019 Su Mo Tu We Th Fr Sa ...原创 2019-04-10 16:21:25 · 638 阅读 · 1 评论 -
系统调用原理与用户态以及内核态相互切换过程,以linux系统为主
系统调用作用和意义:是沟通用户与内核之间沟通的桥梁。我们知道我们计算机几乎所有的硬件等资源都由我们的操作系统管理,不论是我们还是我们自己编写的软件再或者用户的应用软件对计算机硬件或者其他资源进行操作时 都需要操作系统的“同意”,这些资源由操作系统给我们统一保管和分配。而操作系统给我们预留的这些接口就是系统调用。linux下我们经常使用到的系统调用:1.直接使用系统调用:open w...原创 2019-04-14 11:09:03 · 4576 阅读 · 2 评论 -
linux中线程基本原理和操作原语(操作函数)
我在前面的文章中提到了linux产生进程的三个系统调用:1.fork() 用来产生拥有独立的虚拟地址空间的子进程,遵循 读时共享写时拷贝 原则2.vfork() 产生的子进程与父进程共享数据,读写共享,通常搭配exec()或者exit(),否则会死锁3.clone() linux下用来产生线程的系统调用,我们使用的pthread_create()调用的就是它线程的基础内容在这篇文章中有提...原创 2019-05-19 11:51:50 · 763 阅读 · 0 评论 -
vfork()
vfork():sys_vfork()经过系统调用sys_vfork()进入do_fork()时,因其clone_flags为 VFORK | CLONE_VM | SIGHLD,所以只执行了copy_files()、copy_fs()以及copy_sighand而copy_mm(),则因标志位CLONE_VM为1,只是通过指针共享其父进程的存储空间,包括用户空间堆栈在内这里的共享...原创 2019-05-17 16:23:29 · 1856 阅读 · 0 评论 -
操作系统概述
多数时候,我们在学一门语言的时候,写的第一个程序都是hello world;无论是python、c还是c++等其他高级语言写的实际上都属于我们的应用程序,所以应用程序的执行都需要操作系统支持,你知道操作系统都为我们提供了哪些服务吗?一、从helloworld学习OS:#include<stdio.h>int main(int argc , char * argv[]){ p...原创 2019-05-13 14:43:04 · 235 阅读 · 0 评论 -
exec
一、进程替换:1.exec族函数的作用:将fork()产生的子进程的.text和.data段替换成目标进程的.text和.data”换核不换壳“2.linux下进程产生机制:1.编辑一个helloworld程序2.gcc -o main main.c 得到一个可执行文件main3.在我们的终端bash执行./main,实际上bash也是一个进程第3步发生了什么:1.首先系统进行...原创 2019-05-17 10:22:34 · 293 阅读 · 0 评论 -
聊聊线程及相关内容
//本文部分图片来源于网络,侵权联系删除一、基础部分1.什么是线程:是进程中的一个运行实体,也可以理解为进程中开辟出的一条新道路,早期的线程被称为轻量级进程。进程是顺序执行体,但是有了进程,就可以在半路开一条新道路,去执行新的任务。2.为什么要引用线程:很简单,我们希望一个应用程序同时做多件事,并且充分的将资源利用起来。一般情况下,不论选择多线程还是多进程,都是以效率为首的:进程...原创 2019-05-16 15:45:54 · 290 阅读 · 0 评论 -
聊聊进程(基本概念、进程的产生以及多进程编程)
//部分图片来源于网络,若侵联系删除一、进程基本概念:1. 我们经常是写程序,那你知道程序究竟是什么:程序 = 指令+数据,是一个可执行文件,是一个指令序列,是静态的。2.进程的定义:实际上,一个程序运行起来我们就称为一个进程,进程是动态的,是系统资源和调度的独立单位。3.进程控制块:PCB1.是操作系统用于管理和控制进程的额一个专门的数据结构;2.记录进程的各种属性,描述进程动...原创 2019-05-16 11:39:31 · 767 阅读 · 0 评论 -
聊聊操作系统是怎么跑起来的
毋庸置疑的是在我们给计算机上电前:OS是保存在我们计算的硬盘上的(DISK)一、了解两个基本概念:1.BIOS:BIOS是英文"Basic Input Output System"的缩略词,“基本输入输出系统”;BIOS是个人电脑启动时加载的第一个软件;BIOS是一组固化到计算机内主板上一个ROM芯片上的程序。作用:保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程...原创 2019-05-19 14:57:37 · 739 阅读 · 0 评论 -
进程并发你需要知道的概念
一、基础概念:1.临界资源:每次只允许一个进程或者线程访问使用的资源,可以是一台打印机、可以是一个数字、可以是一个文件等等。2.临界区: 用来访问临界资源的代码。比如一个列表为临界资源,增删查改代码就是临界区。3.进程互斥: 临界资源的排他性,决定了进程使用这些资源是互斥的,这种关系就叫互斥。4.三者的联系:进程A,进程B,临界资源C当A执行临界区代码访问C时,B再去执行临界区代码...原创 2019-05-19 14:27:54 · 1089 阅读 · 0 评论 -
linux的基础内容梳理
Linux基础复习一.文件目录树和根:根:在Linux上: / 表示目录的根在windows上: 用C:或者 D: 来表示文件目录的根示例:其中路径又分为俩种:①:绝对路径:从根开始找,即以 ’ / ‘ 开始的路径;②:相对路径:不以 ‘ / ’ 开始的路径,比如 . 开始的表示在当前的文件夹,…表示上一层的文件夹中,~表示用户的主目录(家目录,当前用户的专属目录...原创 2019-03-17 19:11:58 · 273 阅读 · 0 评论