linux系统编程
文章平均质量分 92
从Linux的第一个ls命令到Linux线程池,记录Linux学习经验和笔记,精炼成文章分享给大家,当然本人创作能力没有大佬强,但是会一直努力的
与你日常
擅长C/C++和数据结构,Linux系统编程,Linux网络编程,MySQL数据库,Git企业级开发
展开
-
Linux系统编程——基础IO与文件描述符(管理已打开的内存文件)
②那么一个文件要被访问,也要先加载到内存中才能访问,那么多个进程一定就会打开多个文件,所以系统中也会存在大佬被打开的文件,那么OS就要把这些文件“先描述,再组织”,OS为了管理多个被打开的文件,要先构建struct_file结构体,打开文件时先创建struct_file对象,充当一个被打开的文件,这个结构体最想中包含了一个被打开的文件几乎所有的内容,当这个结构体数量很多时,用双链表组织起来,之后的管理也就是对链表的操作了。所以所有的设备都可以有自己的read和write,但是代码的实现一定是不一样的。原创 2024-05-27 16:45:25 · 930 阅读 · 0 评论 -
Linux系统编程——常见指令集合(入门必备)
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面我们指定的所有文件或目录复制到此目录中。反之,如果我们指定的目的地并非一个已经存在的目录,则会出现错误信息。常用选项:-r 递归处理,通常用在压缩目录的时候,将目录里的所有文件和子目录一并处理,如果不加-r,则只会压缩目录文件,目录里面的东西不会压缩。② -a或-all 表示写详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。原创 2024-04-14 19:22:57 · 971 阅读 · 7 评论 -
Linux操作系统基础开发工具的使用——vim,gcc/g++,MakeFile,gdb,yum/apt
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。在目录/etc/下面有个名为vimrc的文件,这是系统中公共的配置文件,对所有用户有效;一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。原创 2024-04-28 11:37:32 · 1395 阅读 · 0 评论 -
Linux系统编程——进程间通信(管道与共享内存)
目录一,进程间通信预备二,匿名管道2.1 管道原理2.2 匿名管道原理 2.3 pidof工具编辑 2.4 pipe()2.6 管道的四种情况2.8 进程池三,命名管道3.1 关于命名管道3.2 mkfifo命令创建命名管道3.3 mkfifo系统接口创建命名管道 3.4 使用命名管道实现server和client通信3.4.1 公共头文件3.4.2 服务端代码3.4.3 客户端代码和效果演示3.4.4 服务端代码优化后演示3.4.5 客户端对服务端发命令 四,管道特点五,System V 共享内存5.原创 2024-06-13 10:35:18 · 772 阅读 · 1 评论 -
Linux系统编程——进程信号
目录一,信号预备1.1 生活中的信号1.2 技术应用中的信号1.3 signal函数捕捉信号1.3 信号的发送与记录1.4 信号的常见处理方式二,信号的产生2.1 核心转储2.1.1 环境配置2.1.2 利用core文件进行调试2.1.3 core dump标志2.2 通过系统调用向进程发信号2.2.1 kill函数 2.2.2 raise函数2.2.3 abort函数2.3 由软件条件产生信号2.3.1 管道与13号信号2.3.2 alarm函数与14号信号2.4 硬件异常产生信号2.4.1 除0错误2.原创 2024-06-19 11:02:53 · 684 阅读 · 0 评论 -
Linux操作系统预备 —— 冯·诺伊曼体系结构
所以现在的体系运行流程就是:用户输入的数据先放到内存中,CPU读取数据的时候去CPU中找,读取完数据后返回给内存,然后内存再把数据交给输出设备,这样就完成一次数据处理。原创 2024-04-30 19:45:12 · 463 阅读 · 0 评论 -
Linux系统编程——权限概念和权限管理
一个目录dir,权限为drwxrwxr-x,拥有者和所属组都是dyk,这时候我以dyk的身份sudo touch test.txt,此时这个文件的权限为-rwr--r--,拥有者和所属组是root,这时候我是dyk,是普通用户,无法写这个文件,但是却可以rm -f删除这个文件(:ll /,在根目录下有一个tmp文件,是公共目录,权限为drwxrxrwx,如果多个用户都在一个共同的路径下,对该目录有所有权限,那么一个用户可以对拥有者和所属组都不是自己的文件进行删除,那么就彻底乱套了。原创 2024-04-19 15:57:32 · 880 阅读 · 3 评论 -
Linux系统编程——文件系统与软硬链接(管理未被打开的磁盘文件)
磁盘是一种永久性存储介质,在现代大多数计算机中,磁盘几乎是唯一的机械设备,机械硬盘:当代绝大多数大中小型服务器都会采用机械硬盘,因为它的价格实惠,发展得久,功能齐全,但是缺点就是因为是机械装置,移动成本高,容易出故障SSD固态硬盘:当代绝大多数个人电脑所采用得存储设备,因为无机械装置,移动成本低,占用空间小,但是缺点也很明显,就是价格昂贵,假如买一个1TB的固态的价格可能够买10TB的机械硬盘内存也是一段存储空间,但是只要电脑或者服务器一关机或者一断点,内存里的数据就没了。所以普通文件都是存储在磁盘上的。原创 2024-05-30 17:35:28 · 900 阅读 · 0 评论 -
Linux系统编程——操作系统的初步认识(Operator System)
我们来举一个简单的例子,如下图:一个学校有三个角色,为学生,辅导员和校长,校长是管理者,学生是被管理者,那么辅导员充当什么角色呢?我们先了解下什么是“决策”和“执行完成任何一件事都要经过两种过程:①首先是绝对一件事要不要做和如何去做 —— 决策②然后就是具体落实做这件事 —— 执行校长作为管理者管理学生,那么校长就是决策的那个人,但是校长一般不 直接执行决策,会把决策交给辅导员去执行,所以辅导员扮演的角色就是“执行者”,执行管理者的决策。原创 2024-05-01 20:24:05 · 675 阅读 · 0 评论 -
Linux实现简单进度条(附原理解释和动图效果)
先看下面的代码和运行结果,只是一个简单的打印“你好”然后休眠三秒,最后程序结束再看下面的代码和运行结果:这串代码中我们把printf里面的 ' \n ' ,去掉了,那么运行结果就不同了,就变成了先休眠三秒,然后再打印的“你好”。该现象证明了,打印的时候,系统和屏幕中间是存在缓冲区的。显示器对应的是行刷新,就是当缓冲区写满或者代码执行时遇到 ' \n ' 时,才会显示到屏幕上,至于原因我们到IO流部分会详细讲解,目前阶段可以通过“”的概念把屏幕也看成一个文件。原创 2024-04-29 16:31:05 · 315 阅读 · 0 评论 -
Linux系统编程——动静态库
一个可执行程序,由一堆源文件和一堆头文件经过预处理,编译,汇编,链接四个步骤后得来。① 一般来说,程序都是先通过汇编之后形成.o文件,然后就将所有的.o文件进行链接最终形成可执行程序。那么,如果我把我的.h和.o给别人,别人能用吗?原创 2024-05-31 16:10:42 · 1105 阅读 · 2 评论 -
Linux系统编程 —— 进程概念,环境变量,虚拟地址空间总结(收藏向)
教材概念:进程是一段程序的执行过程,是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。内核概念:进程是操作系统动态执行的基本单位,是系统资源最基本的分配单元,也是系统最基本的执行单元1,以我们写的代码为例,我们写完一个.c文件的代码并且编译好后,在Windows是一个.exe后缀的文件在Linux中是一个绿色的文件叫做可执行文件2,这个时候我们把这玩意儿叫做“程序”,当程序运行起来后,就叫做“进程”。3,原创 2024-05-07 16:48:19 · 726 阅读 · 2 评论 -
Linux系统编程——进程控制
fork之后,父子进程各自执行代码的一部分,代码数据只读,父子进程共享;变量数据写时拷贝那么如果子进程我不执行原来的代码了,我想执行一份全新的程序呢?就是父子代码不共享了,子进程执行自己的代码。程序替换是通过特定的接口,加载磁盘上一个全新的程序(代码和数据),加载到子进程的地址空间中问题:进程替换的时候有没有创建新的子进程?解答:没有创建进程。进程为内核数据结构+代码和数据,把一个全新的程序加载到内存里,仅仅是重新建立了映射关系,进程的内核数据结构,状态和优先级等未发生变化,所以没有创建进程。原创 2024-05-11 18:14:48 · 906 阅读 · 1 评论