自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 linux系统编程-定时器与休眠

1、创建两个子进程,一子进程利用kill发送信号,二子进程通过signal捕捉信号,并执行信号处理函数;一子进程通过管道的方法获取兄弟进程二子进程的pid号。(注意子进程会继承父进程的信号处理函数)#include<signal.h>#include<stdio.h>#include <unistd.h>#include <sys/wait.h>#include <string.h>#define BUFF_SIZE 1024void

2022-01-16 20:43:06 2567 1

原创 linux系统编程-监控文件事件

一、监控文件事件步骤和API使用inotify API有以下关键步骤:1、使用inotify_init()创建一个inotify实例,返回的文件描述符用于后续操作中指代该实例。2、使用inotify_add_watch向inotify实例的监控列表添加条目,即添加应用感兴趣的文件或目录。每个监控项包含一个路径名及相关的位掩码,位掩码指明所要监控的事件。inotify_add_watch将返回一个监控描述符,用于后续操作指代该监控项。3、应用需要对inotify文件描述符执行read()操作以获取事件

2022-01-16 20:42:38 406

原创 linux系统编程-目录与链接

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块。文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。软链接: 保存了其代表的文件的绝对路径,是另外一种文件,相当于快捷方式,在硬盘上有独立的区块,访问时替换自身路径。硬链接的创建和删除:int link(const char *oldpath,const char *newpath);int unlink(c

2022-01-16 20:42:14 404

原创 linux系统编程-进程或线程间通信机制

1、通信机制分类linux进程或线程间通信机制主要分为三类:通信:这些工具关注进程之间的数据交换。同步:这些进程关注进程和线程操作之间的同步。信号:在特定场景下可以将信号作为一种同步技术,信号还可以作为一种通信技术。根据上图总结一下:用于通信的主要有:管道和FIFO、消息队列(POSIX和SYSTEM V)、共享内存(POSIX和SYSTEM V)、内存映射、socket(数据报和流)、伪终端。用于同步的主要有: 信号量、互斥量、条件变量等。其实又可以将互斥量,读写锁,自旋锁这一类用于保护临

2022-01-16 20:41:32 3394

原创 linux系统编程-进程和线程相关、锁机制

1、进程的创建使用fork()创建进程系统调用 fork()允许一进程(父进程)创建一新进程(子进程)。需要注意的点有:a、子进程拷贝父进程的栈、数据段、堆,与父进程共享文本段。b、库函数 exit(status)终止一进程,将进程占用的所有资源(内存、文件描述符等)归还内核,父进程可使用系统调用 wait()来获取该状态。c、系统调用 execve(pathname,argv,envp)加载一个新程序,这将丢弃现存的程序文本段,并为新程序重新创建栈、数据段以及堆。d、调用 fork()之后,系

2022-01-15 11:47:38 682 2

原创 linux驱动-定时器

1、系统节拍率内核的宏定义CONFIG_HZ表示系统节拍率,系统节拍率意味着每秒的节拍数,通常为100HZ。因为高节拍率虽然能够以更高的精度运行,时间测量也更加准确,但导致中断的产生更加频繁,频繁的中断会加剧系统的负担,所以为了追求平衡,通常设置为100HZ。2、全局变量 jiffies记录系统从启动以来的系统节拍数。HZ 表示每秒的节拍数, jiffies 表示系统运行的 jiffies 节拍数,所以 jiffies/HZ 就是系统运行时间,单位为秒。3、jiffies和时间ms、us、ns的转

2021-11-26 16:03:37 1383

原创 linux内核中断

本文将主要就中断的上下部机制,阻塞IO和非阻塞IO,异步通知这几个点列出一些实验代码,对照代码的注释,可以帮助我们更好的理解这些概念和知识。本文所贴的代码全部经过上板子编译运行,各位看官可放心食用(>.<)。中断上下部机制:一般中断上半部只是对中断进行登记,将工作推迟到下半部中去执行,中断上半部要求时间尽量快,不可引起阻塞和休眠,也不可以嵌套中断。在中断上半部发起对下半部的调度,下半部会在合适的时机执行(与内核的调度有关),下半部机制有软中断、tasklet和工作队列。阻塞IO和非阻塞IO、

2021-11-26 15:25:46 848

原创 linux系统编程-信号

linux系统编程两本书太厚了!感觉快学不动了,继续加油QAQ…一、信号的概念1、信号的定义信号是事件发生时对进程的通知机制。有时也称之为软件中断。注意:一个进程能够向另一进程发送信号,进程也可以向自身发送信号。但是其实本质上发送的信号通常都起源于内核。2、标准信号和实时信号标准信号的编号范围为 1~31,实时信号故名思意就是希望得到实时处理的信号,需要对实时信号做排队处理。如果不做排队处理(例如标准信号),那么可能出现的状况就是:向一个进程发送了n多个信号,但是它却只捕获到了几次。3、信号的

2021-11-14 22:25:59 916

原创 c语言-基础知识点复习

指针的定义int a = 100;int b = 200;int p_a = &a; //定义指针变量时必须带,注意取地址符号,指针p_a指向aprintf("%d\n", *p_a); //除了定义外,*p_a代表指针所指向的数据。p_a = &b; //除了定义外,p_a代表指针地址。printf("%d\n", *p_a);定义指针变量时必须带*,给指针变量赋值时不能带*。指针指向数组例子1:#include <stdio.h&

2021-11-12 22:49:51 1495

原创 linux系统编程-静态库、共享库的创建和链接

静态库实际上就是一个目标文件的集合。使用 ar命令能够创建静态库:$gcc -g -c mod1.c mod2.c mod3.c //-g使用gdb调试,-c只编译不链接$ar r libdemo.a mod1.o mod2.o mod3.o //创建静态库$rm mod1.o mod2.o mod3.o //创建完成后可删除.o目标文件显示静态库中所包含的目标文件:$ar tv libdemo.arw-r–r-- 1000/100 1001016 NOV 15 12:26 2009 mod

2021-11-06 19:36:39 469

原创 c语言-编译与链接

编译与链接从源代码生成可执行文件可以分为四个步骤:分别是预处理、编译、汇编和链接。预处理内容:处理源文件和头文件中以#开头的命令,比如 #include、#define、#ifdef 等。预处理的规则一般如下:1、将所有的#define删除,并展开所有的宏定义。2、处理所有条件编译命令,比如 #if、#ifdef、#elif、#else、#endif 等。3、处理#include命令,将被包含文件的内容插入到该命令所在的位置,递归进行。4、删除所有的注释。5、添加行号和文件名标识。6、保

2021-11-04 23:07:25 565

原创 linux系统编程-文件属性

1.stat()获取文件信息stat()系统调用用于获取文件信息:int stat(const char *pathname,struct stat *statbuf);返回一个由statbuf指向的stat结构:struct stat{ dev_t st_dev; //设备ID ino_t st_ino; //i节点号 mode_t st_mode; //标识文件类型和指定文件权限 nlink_t st_nlink; //链接数目 uid_t st_uid; //属主 gid_t

2021-10-17 16:57:05 120

原创 linux系统编程-文件IO缓冲

1.什么是文件IO缓冲,为什么需要文件IO缓冲 什么是文件IO缓冲顾名思义,用来缓存数据。read()和 write()系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据。在后续某个时刻,内核会将其缓冲区中的数据写入磁盘(因此,可以说系统调用与磁盘操作并不同步。) 为什么需要文件IO缓冲?A、更为快速,系统调用不需要等待磁盘操作。B、更为高效,减少了内核必须执行的磁盘传输次数。2. 指定stdio缓冲区形式、刷新缓冲区 如何指定std

2021-10-16 20:28:46 220

原创 linux系统编程-系统限制和选项

UNIX需要对各种系统特性和资源加以限制,例如:一个进程能同时拥有多少已打开的文件?系统是否支持实时信号?int 类型变量可存储的最大值是多少?一个程序的参数列表能有多大?路径名的最大长度是多少?由此出现了系统限制和系统选项。1.系统限制使用<limits.h>文件、sysconf()或 pathconf()调用获取系统限制值。调用 sysconf()或 pathconf()时应入参的常量名以_SC_的常量用于 sysconf(),冠以_PC_的常量用于 pathconf()

2021-10-16 20:28:38 97

原创 linux系统编程-时间

程序需要关注两种时间:一种是真实时间(时间戳),第二种是进程使用CPU的时间总量。1、真实时间之间的转换真实时间格式: time_t 类型,表示Epoch以来的秒数 truct tm 分解时间,日期被分解为多个段,包括年,月,日,小时…struct tm{ int tm_sec; int tm_min; int tm_hour; int tm_mday; ...}; struct timeval,表示Epoch以来的时间,可精确到微秒struct timeval{ t

2021-10-16 16:21:55 246

原创 linux系统编程-用户和组

1.密码文件、shadow密码文件和组文件系统密码文件/etc/passwd,每行包含7个字段:mtk:x:1000:100:Michael Kerrisk:/home/mtk:bin/bash 登录名 经过加密的密码,实际存储到shadow密码文件中 用户ID 组ID 注释 主目录,用户登陆后所处的初始路径 登录shell组文件 /etc/group,每条记录包含4个字段:jambit:x:106:claus,felli,frank.... 组名 经过加密的组密码 组

2021-10-16 15:48:23 115

原创 linux系统编程-内存分配

1.如何调整堆的内存边界int brk(void *end_data_segment); //参数为调整后的堆边界的地址void *sbrk(intptr_t increment); //参数为调整的边界增量大小**sbrk(0)**用于定位当前堆的边界地址。2.内存分配:malloc和freevoid *malloc(size_t size);void free(void *ptr);A.free并不降低堆的边界,而是将内存添加到空闲内存列表B.mclloc实现的过程:首先会扫描之前

2021-10-16 15:48:05 140

原创 linux系统编程-进程

1.获取进程号和父进程号pid_t getpid(void); //获取进程号pit_t getppid(void); //获取父进程号2.进程的内存布局文本段包含了进程运行的程序机器语言指令。文本段具有只读属性,以防止进程通过错误指针意外修改自身指令。数据段包含显式初始化的全局变量和静态变量。当程序加载到内存时,从可执行文件中读取这些变量的值。BSS段包含了未进行显式初始化的全局变量和静态变量。栈是一个动态增长和收缩的段,由栈帧组成。向下增长。堆是可在运行时(为变量)动态进

2021-10-16 15:47:42 94

原创 linux系统编程-进程凭证

1、实际用户ID与有效用户ID(相对于进程而言) 实际用户ID实际用户 ID 和实际组 ID 确定了进程所属的用户和组,shell 从/etc/passwd 文件中读取相应用户密码记录的第三字段和第四字段,置为其实际用户 ID和实际组 ID。 有效用户ID有效用户ID决定着进程的权限,一般有效用户ID等于实际用户ID,但有两种方法使二者不同,一是系统调用,二是进程运行set-user-ID程序。2.Set-User-ID程序(相对于程序而言)可执行文件拥有两个特别的权限位 set-user-

2021-10-16 15:47:25 153

原创 linux系统编程-深入文件IO

1.原子操作的重要性举两个例子:以独占方式创建一个文件同时指定 O_EXCL 与 O_CREAT 作为 open() 的标志位时,如果要打开的文件已然存在,则 open() 将返回一个错误。这提供了一种机制,保证进程是打开文件的创建者。对文件是否存在的检查和创建文件属于同一原子操作。向文件尾部追加数据考虑如下代码:若多个进程执行此操作,可能出现数据覆盖的现象,为了防止此现象的发生,需要将文件偏移量的移动与数据写操作纳入同一原子操作。在打开文件时加入 O_APPEND 标志就可以保证这一点。文

2021-10-16 15:47:06 367

原创 linux内核数据结构

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-03-19 21:22:29 165

原创 linux内核进程调度

请问

2021-03-19 21:22:02 253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除