![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 91
道_可
待到来年花开,依旧
展开
-
如何理解Linux下的文件描述符 ?以及Linux下的重定向与缓冲区这一概念???
开始正式内容之前,会先大致描述一下我们在说些什么。所有是内容都是围绕文件描述符这一概念进行展开,但是并不会直接切入这一概念,因为这一概念并不是很难,但是因为文件描述符而涉及的周边概念是很广泛的,我会由周边涉及到的知识逐步递进,逐渐引入文件描述符。首先我们先解答下面的疑问。1.文件是什么?请参考C语言文件操作,总结一下就是,文件 = 内容 + 属性(属性也是数据)2.文件的相关操作是什么?无外乎两种:a.对内容的操作 b.对属性的操作3.访问文件本质是谁在访问?进程。为什么?原创 2024-04-25 15:07:52 · 819 阅读 · 2 评论 -
关于Linux下的进程替换(进程篇)
其实这里还涉及到一个写时拷贝的问题:在之前的博客中提及过,父进程创建子进程,代码是共享的,地址空间也是共享的,因为代码是不能更改的,而数据写时拷贝。-----------------------------------------------测试代码process_replace.c (下面的测试代码脚本都是这个)-------------------------------------官方的说法是:程序替换,是通过特定的接口,加载磁盘上的一个权限的程序(代码和数据),加载到调用进程的地址空间中!原创 2024-04-12 10:12:23 · 747 阅读 · 0 评论 -
关于Linux下的进程等待(进程篇)
最后思考一下:既然进程是具有独立性的,进程退出码,不也是子进程的数据吗?如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息。waitpid/wait可以在存在多个子进程的情况下,让子进程退出具有一定的顺序性,将来让父进程进行更多的收尾工作。因为如果子进程退出,父进程不接收子进程的退出状态,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。只有子进程退出的时候,父进程才会调用waitpid函数,进行返回(注意,父进程依旧在运行)原创 2024-04-10 14:09:57 · 804 阅读 · 1 评论 -
关于父进程中的环境变量无法传递给子进程
这里是没有进入if语句的,因为第二次切割子串在 if 语句之后, g_argv[1] 为空,条件不成立,未进入语句,继续执行下面的代码,创建子进程进行程序替换,但是替换时export这样的命令是不存在的(我们编写的shell脚本内),所以出现了报错。今天在写shell脚本的时候,遇到一个棘手的问题,是关于环境变量,当时父进程的环境变量是无论如何也无法传递给子进程,重重排查,才找到问题所在,所以心血来潮,想写一下关于Linux下的环境变量具有全局属性的这个问题。环境变量是否具有全局属性?原创 2024-04-10 09:41:52 · 733 阅读 · 0 评论 -
关于Linux中的环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数不知道各位小伙伴会不会有疑问,为什么我们在Linux下运行自己写的程序前面需要加上./, 而而运行系统的指令是不需要加上./。这是为什么呢?return 0;total 20可以看到,执行a.out的时候前面需要加上 ./ , 而系统的指令ls是不需要的,这是为什么?原创 2024-04-09 17:14:31 · 1031 阅读 · 0 评论 -
详解简单的shell脚本 --- 命令行解释器【Linux后端开发】
原因是因为,当前我们自己写的shell,无论我们写的任何指令,都是交给了子进程 , 子进程进行进程替换帮助我们来完成的指令,那么指令就只会影响子进程,而不会影响父进程。那么我们想要的是shell脚本所在的路径发生变化,所以我们想要进行判断命令,如果是所谓cd这样的命令,那么我们不能创建子进程,而是直接交给父进程。这是一个需要注意的小细节的地方,因为在输入的时候,当我们最终输入字符结束的时候,会输入一个“回车”键盘,它会被缓冲区拿到并被识别为“\n”。如果字符串中不存在更多的标记,则返回 NULL 指针。原创 2024-04-08 16:22:50 · 1094 阅读 · 0 评论 -
关于Linux下的进程创建与终止(进程篇 - 涉及写时拷贝,fork函数)
是可以自定义设置的所以:我们自己可以使用这些退出码和含义,但是,如果你想自己定义,也可以自己设计一套退出方案!原创 2024-04-07 11:05:55 · 913 阅读 · 0 评论 -
关于Linux下的进程状态(进程篇)
当系统中存在着大量的进程,那么一定会消耗大量的内存资源,此时,系统不得不通过把内存中的进程(对应的代码和数据)交换到磁盘,从而保证内存中仍有空余的空间,此时,对于被交换的进程来说,状态就被称为挂起。所以为了防止这样情况的发生,才有了D状态,他的意思是告诉系统,我是不可以被干掉的,只能等我传输成功,从睡眠中醒来才可以干掉我这个进程。或者来说c语言中的scanf,c++中的cin,在系统中不也是在等待键盘资源的输入嘛,当我们的程序存在这些命令的时候,如果此时不在键盘上输入,那么此时的进程就处于阻塞状态。原创 2024-04-06 16:54:32 · 884 阅读 · 0 评论 -
关于Liunx下的进程概念
的方式运行一个程序的时候,本质上,就是在系统层面上创建一个进程,Linux是可以同时加载多个可执行程序的,意味着系统中是会出现同时存在大量进程的情况。I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。通过对进程对应的PCB结构的增删查改,也就实现了对进程的管理。标示符: 描述本进程的唯一标示符,用来区别其他进程。原创 2024-04-06 14:52:48 · 406 阅读 · 0 评论 -
简单聊聊冯诺伊曼体系结构
小a:键盘输入(制造产品)--- > 加载到内存 --- > 内存交给cpu(进行打包,封装,填写收件人信息)--- > 加载到内存 --- > 输出设备(通过网卡发出快递)小b:网卡输入(收到产品)--- > 加载到内存 --- > 内存交给cpu(拆掉快递,撕开包装)--- > 加载到内存 --- > 输出设备(显示器打印信息)b.如果没有存储器参与进来,那么cpu就没有操作的空间,只能与外设直接交互,有存储器的话,可以让软件(系统)参与进来,进行更加合理的分配。为什么不能直接让cpu与外设直接交互?原创 2024-04-03 19:06:43 · 307 阅读 · 0 评论 -
浅谈linux下的进程地址空间(虚拟地址/线性地址)
示例:运行之后发现:同一个变量,同一个地址,在运行一段时间后,竟然会在同一时间出现两个不同的值?这是完全违背常理的,按道理来说一个 int类型 ,只能存储一个整数,为什么这里会出现两个完全不同的值呢???要想了解这个问题,我们需要先了解一些东西。linux下的地址空间:注意,这里指的是虚拟地址空间【说明】1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。原创 2024-03-25 17:04:38 · 1031 阅读 · 0 评论 -
linux环境基础开发工具3(git 、 gdb)
注:这个可以理解为是执行完当前函数,vs是没有这一功能的,vs一般是在函数的开头与结尾处设置断点。list/l 行号:显示程序源代码,接着上次的位置往下列,每次列10行。print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。注:开始调试,如果没有设置断点,程序就直接结束 - 相当于vs中的f5。注:可以理解为vs中运行至下一个断点,如果中途没有断点,程序直接结束。:显示程序源代码,接着上次的位置往下列,每次列10行。注:删除的时候不能输入行号,只能输入编号才可以删除成功。原创 2024-03-14 19:31:44 · 755 阅读 · 0 评论 -
linux环境基础开发工具2(gcc/g++ 、 make/ Makefile)
static。原创 2024-03-14 16:35:31 · 568 阅读 · 0 评论 -
linux环境基础开发工具1(vim 、 yum)
在Linux下安装软件一个通常的办法是下载到程序的源代码并进行编译得到可执行程序但是这样太麻烦了,于是有些人把一些常用的软件提前编译好做成软件包可以理解成windows上的安装程序)放在一个服务器上通过包管理器可以很方便的获取到这个编译好的软件包直接进行安装软件包和软件包管理器就好比"App"和应用商店这样的关系是Linux下非常常用的一种包管理器主要应用在Fedora, RedHat,Centos等发行版上。原创 2024-03-14 16:35:24 · 1100 阅读 · 0 评论 -
关于linux权限的相关操作
文件和文件目录的所有者:u(User)文件和文件目录的所有者所在的组的用户:g(Group)其它用户:o(Others)原创 2024-01-05 18:36:12 · 845 阅读 · 0 评论 -
linux常见基础指令
指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。起别名并不是一直有效,只在本次登陆上上有效,如果退出,下次登录就会失效,如果想要一直有效,就需要将这条指令放进启动脚本里面。命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下。对于文件,将列出文件名以及其他信息。原创 2023-12-30 14:14:09 · 1166 阅读 · 0 评论