![](https://img-blog.csdnimg.cn/direct/e91b3d72d6f04888896c881239b2eded.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux学习笔记
文章平均质量分 89
Linux入门到精通
tsyist
但行好事,莫问前程。
展开
-
Linux---进程间通信之匿名管道
管道通信既不是system V标准也不是prosix标准,我们说不同的通信方式本质上就是不同的模块提供的公共空间,所以对于管道通信来说就是文件系统给两个进程提供的公共空间。在现实生活中也有许多管道,例如:水管,输油管等。他们一般都会有一个入口和一个出口,用来传输人们所需要的资源。而我们计算机中的管道传输的是数据,也有一个入口和一个出口,对应的就是发送数据的进程和接收数据的进程。原创 2024-05-16 21:51:55 · 1027 阅读 · 3 评论 -
Linux---动静态库
但是,有可能进程1共享区只是一部分区域映射到某个库,进程2共享区也只是一部分区域映射到某个库,但是不管最终物理内存到虚拟地址是怎样映射的,可执行程序加载到物理内存中的任何位置,最后一定要保证库中产生的各种代码与这个库加载到内存中的位置和映射到共享区的位置是没有关系的,这就是产生位置无关码。如果是静态链接,形成进程后就没有共享区,此时代码区包括自己的代码也包括库代码,这样的话假如有10个程序都有cout函数,程序就把每份c++标准库都拷贝一份到代码区,这时在内存中就会有10份重复的库代码,很浪费内存。原创 2024-05-04 09:56:54 · 1117 阅读 · 1 评论 -
Linux---软硬链接
在使用ls命令时,加上-i的选项就可以在第一行查看文件的inode,这里我们可以看到我们的软链接文件和原本的文件的inode不同,也就是说我们的软链接文件有自己的inode,并且软链接文件和原有文件的属性也不一致,例如我们原本文件权限为0664,文件大小为0,我们的软链接文件权限则为0777,文件大小为4。这说明我们创建软链接文件时操作系统会给我们创建一个新的文件,这个文件有自己的属性和inode,但是如果我们执行这两个文件的话,二者的执行结果是一致的。原因就是创建目录文件时,目录文件下会自动生成。原创 2024-05-01 19:53:44 · 772 阅读 · 2 评论 -
linux---简单模拟实现shell(内置命令的解析)
我们要明白:每个进程都有他自己的工作路径,我们在执行cd命令的时候,是先进行了fork(),创建了子进程,用子进程执行的cd命令,也就是说我们cd更改的是子进程的工作路径,跟父进程(myshell进程)没有关系,在子进程完成cd命令退出后,那么子进程的工作路径也就随之消失了。而我们做cd命令的时候,我们内心期望改的是父进程的路径,我们要解决这个问题的话就需要不通过子进程修改工作目录,当我们发现第一个子串是cd的时候,就要直接更改工作目录,更改工作目录的工作就交给chdir函数来完成。原创 2024-03-29 21:35:06 · 1128 阅读 · 3 评论 -
Linux---进程替换
linux进程替换原创 2024-03-22 21:03:29 · 1143 阅读 · 2 评论 -
Linux---基础IO(万字解读文件知识)
我们要注意,如果我们使用系统接口write时不用强制刷新,但是如果我们在使用C语言中printf函数时即使末尾加上了‘\n’时,不fflush强制刷新的话,是没有办法看到结果的,这是因为printf后数据放在了语言层的缓冲区,fflush之后,就会将放在缓冲区的数据刷新到fd指向的文件,加上‘\n’也不管用的原因是原本fd=1指向的是显示器,显示器采用的是行刷新,而现在fd=1指向的磁盘文件log.txt,而磁盘文件采取的是全刷新,也就是缓冲区满后才刷新,所以‘\n’也无法刷新。原创 2024-04-07 20:36:34 · 762 阅读 · 1 评论 -
Linux---文件系统
分区500GB的磁盘空间被拆分成每个元素大小是512byte的数组,我们将得到10多亿个扇区,那样的话实在难以管理,所以操作系统为了更好的管理磁盘,会对磁盘进行分区分区操作。磁盘分区就是使用分区编辑器在磁盘上划分几个逻辑部分,这样的话不同的目录和文件就可以存储进不同的分区,分区越多,就可以将文件的性质区分的越细,在不同的地方存储不同性质的文件以便于管理文件。例如在我们电脑中,通常只有一块磁盘,但是我们电脑通常会被分为C盘和D盘等等。格式化磁盘完成分区后,还需要对磁盘进行格式化。原创 2024-04-25 21:19:41 · 1020 阅读 · 3 评论 -
Linux---FILE模拟实现
上篇文章,我们主要介绍了缓冲区原理,知道语言级缓冲区和文件描述符一样就是FILE结构体中的一个成员,这篇文章我们实现一个FILE的demo代码。以上就是模拟实现FILE的代码,很简单,我在此就不赘述了。原创 2024-04-10 21:40:17 · 276 阅读 · 1 评论 -
linux---缓冲区及FILE理解
在介绍缓冲区问题之前我们先来看一段代码:结果为:这正是我们想要的结果。对此,我们再对这段代码做一些修改:我们在代码最后加上fork()函数,创建子进程。其实结果还是我们想的那样,很正常。但是当我们把输出结果重定向到文件中去的话,就会出现下面这样非常诡异的现象:我们可以发现,重定向到磁盘文件buf.txt中的数据,顺序乱了,而且刚刚我们使用C语言接口打印的数据全都输出了两份,这究竟是为什么呢?其实这就是缓冲区搞得鬼。原创 2024-04-10 17:58:24 · 920 阅读 · 1 评论 -
环境变量与对main函数三个参数的解释
这些变量在整个系统中从bash往后的其他所有进程都会访问到,不同的环境变量会有不同的用途,例如:环境变量HOME就是记录着当前用户的家目录,所以在命令行上使用cd ~的时候可以直接将当前路径切换到家目录下,cd ~就直接变成了cd HOME,环境变量HOSTNAME储存着主机名,所以Linux可以知道当前使用机器的主机名,环境变量PWD时时刻刻记录着的当前所在路径,所以在使用pwd指令的时候可以在屏幕上显示当前所在的路径,那么这就是环境变量存在的意义,它可以帮助操作系统解决一些不同领域上的问题。原创 2024-03-13 20:51:14 · 828 阅读 · 0 评论 -
linux进程地址空间
以前学习的地址空间其中堆区和栈区的空间会随着程序的改变而发生相应的改变,栈区向低地址的方向生长,堆区向高地址的方向生长,而数据区和代码区的大小是固定的,不会随着代码的改变而改变。这就是我们以前掌握的知识。但现在的问题是我们之前学习的内存指的是我们电脑硬件的内存吗?我们由一段代码验证一下。结果我们却得到了一个很奇怪的运行结果:上面那段代码通过死循环语句不断地打印val的值和val的地址,在五秒之后,子进程将val的值修改成了300,之后子进程的val则为300,父进程的val还是100原创 2024-03-08 21:23:22 · 1313 阅读 · 2 评论 -
fork函数与进程退出
调用fork函数创建子进程之后,到底是父子进程谁先执行后续的代码我们不知道,那是调度器的工作,但是我们知道无论谁先执行后续的代码,肯定有一个进程对id进行修改,发生修改时就会产生写时拷贝,所以内存上其实会存在两个变量记录fork函数的返回值,而不是一个变量记录两个值。也就是说fork()函数的创建子进程的功能在return执行之前就已经执行完毕,当子进程创建好之后就有两个执行流执行下面的代码,所以return指令会被执行两次,以至于fork函数会有两个不同的返回值,子进程返回0,父进程返回子进程id。原创 2024-03-10 21:25:24 · 1064 阅读 · 0 评论 -
linux----进程等待
而非阻塞调用,则是当父进程执行到wait函数的时候,若子进程此时没有结束,父进程则接着去执行自己的代码,并且间隔一段时间就来查询一下子进程是否结束,如果子进程还没结束的话,就立刻返回接着执行自己的代码,直到子进程结束时回收子进程的资源。通过以上的实验我们可以得知:wait函数可以帮助我们回收已经结束的子进程,并且采取的是阻塞式等待的方法,即当父进程执行到wait函数的时候,如果子进程还没执行完的话,父进程就会一直在那里等待,直到子进程运行结束要退出父进程才会用wait函数回收完子进程后接着执行后面的代码。原创 2024-03-21 21:04:19 · 940 阅读 · 1 评论 -
Linux权限详解
文件权限=人(角色)+ 文件属性(读[r],写[w],执行[x])原创 2024-01-25 13:59:50 · 892 阅读 · 1 评论