![](https://img-blog.csdnimg.cn/585ae86b075040e2b43c6702b9030ac2.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 92
Linux
蝎子莱莱xo
这个作者很懒,什么都没留下…
展开
-
Linux知识点 -- 常见指令
(2)Linux是由隐藏文件/目录的,让文件/目录以 . 开头,就是隐藏文件/目录;用途:可以用来隐藏一些配置文件;Unix时间戳是从1970年1月1日开始所经过的秒数,不考虑闰秒;*是一种通配结构,意思是删除当前目录下所有的.c后缀的文件;(1)如果在磁盘上创建一个空文件,还是要占空间的,因为。Linux没有回收站,删除了就没了;,就算是空文件,还是有属性数据的;需要安装,必须是root用户;:删除所有file开头的文件;这样是以字符串的形式传给ls;:删除当前目录下所有文件;wc -l是统计文本行数;原创 2023-05-11 15:31:17 · 538 阅读 · 0 评论 -
Linux知识点 -- 回调函数类型
与上面的写法是等价的;见Reactor服务器。原创 2023-10-19 14:26:52 · 161 阅读 · 0 评论 -
Linux知识点 -- Linux权限
Linux严格意义上说是一个操作系统,我们称之为核心(kernel),但我们一般用户,不能直接使用kernel,而是通过kernel的外壳程序,也就是shell,来与kernel沟通;超级用户(root):只有一个,可以在linux系统下做任何事,不受限制;在该目录下,只能自己删除自己的文件,无法删除其他人的文件;凡是在umask中出现的权限,都不应该在最终权限中出现;普通用户:在linuxia做有限的事,要受权限的约束;超级用户的命令提示符是#, 普通用户的命令提示符是$;普通用户切换普通用户需要密码;原创 2023-05-11 18:05:56 · 1281 阅读 · 0 评论 -
Linux知识点 -- Linux环境基础开发工具使用
gcc / g++是专门用来编译链接c / c++的编译器;默认centos7.6 or 8匹配的gcc版本是4.8;(1)预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …)(2)编译(c -> 汇编)(3)汇编(汇编 -> 可重定向二进制目标文件)(4)链接(链接多个.o文件,多个.obj文件合并形成一个可执行文件,默认名为a.out)原创 2023-05-13 16:34:19 · 1050 阅读 · 2 评论 -
Linux知识点 -- 进程概念(一)
我们使用的计算机大部分都遵守冯·诺伊曼体系结构:为什么CPU不直接和外设进行数据交互,而需要通过存储器呢?第一:从存取速度方面来说:CPU&&寄存器 > 内存 > 磁盘 > 光盘;让cpu直接和内存打交道,而不是和外设打交道,因为外设的存取速度很慢,会拖慢整机的响应速度;第二:不用内存代替磁盘是为了控制成本;CPU读取数据(数据 + 代码)都要从内存中读取,站在数据的角度,我们认为CPU不和外设直接交互;CPU要处理数据,需要先将外设中的数据加载到内存,站在数据的角度,外设直接和内存交互;任何计算机系统原创 2023-05-22 15:14:25 · 579 阅读 · 0 评论 -
Linux知识点 -- 进程概念(二)
定义bash中的普通局部变量我们在命令行将xo定义为12358,可以通过echo打印出来,但是无法通过env查到,因为xo并没有定义为环境变量,而只是bash中的普通局部变量;也可以通过set打印出来;这里的cnt也是局部变量;原创 2023-05-30 18:02:42 · 665 阅读 · 0 评论 -
Linux知识点 -- 进程概念(补充)
在用户每次使用malloc等函数在进程的堆区申请地址时,用户只需要指定空间的大小,并且会得到一个起始地址,而不会得到结束地址;堆区申请的空间都是连续的;原创 2023-08-14 21:05:53 · 555 阅读 · 0 评论 -
Linux知识点 -- 进程控制(一)
理论上,子进程也要有自己的代码和数据,可是一般而言,我们没有对于子进程的加载过程,也就是说,子进程没有自己的代码和数据,所以子进程只能“使用”父进程的代码和数据;将函数指针存入数组中,通过函数回调的方式,就可以在父进程等待时调用其他函数;了,因为一般而言程序崩溃后,退出码对应的return语句没有被执行;从结果可以看出,waitpid函数也可以回收僵尸进程,但是。创建子进程,给子进程分配对应的内核结构,必须要求是。父进程可以通过status拿到子进程的退出结果;的情况下:status的。原创 2023-06-10 16:50:41 · 595 阅读 · 0 评论 -
Linux知识点 -- 进程控制(二)
fork之后,父子进程各自执行父进程代码的一部分,父子代码共享,数据写时拷贝各自一份,如果子进程想执行一个全新的程序,就需要使用程序替换;上图这些函数统称exec函数;原创 2023-06-17 12:16:56 · 603 阅读 · 0 评论 -
Linux知识点 -- 基础IO(一)
c语言的文件接口,如果只给文件名而并没有指定路径,该文件的路径就会默认为当前路径;文件在磁盘上存放着,当我们写代码访问文件时,实质上是进程在访问文件;只需传入文件描述符,就可以关闭打开的文件;键盘,显示器等也都可以被看作文件;可以看出,这三个流都是文件;将umask权限掩码设为0;返回的是文件描述符;原创 2023-07-20 20:48:59 · 68 阅读 · 0 评论 -
Linux知识点 -- 基础IO(二)
运行结果:输出重定向到了log.txt中;原创 2023-07-27 16:45:56 · 751 阅读 · 0 评论 -
Linux知识点 -- 基础IO(三)
如果文件特别大,一个块组中放不下,需要存放到其他块组中,那么,inode中的blocks数组前m个block存放的是这个文件的数据,数组后面的block存放的是剩下数据存放的block块号,相当于一个间接寻址。磁盘是永久性存储介质,如:SSD,U盘,光盘,磁带等;在上面我们已经制定了动态库的路径,动态库还是无法链接,这是因为我们是给gcc指定的链接,这和动态库的加载过程有关;,存在inode还有,但是block没了;当我们删除硬链接指向的文件时,硬链接inode还存在,属性中的硬链接数从2变成了1;原创 2023-08-01 11:18:25 · 216 阅读 · 0 评论 -
Linux知识点 -- VS Code远程连接服务器协助开发
将program项中的a.out改成自己需要调试的文件所在的路径名;点到cpp文件内部,Ctrl + Shift + P,编辑配置;如果要清除远程主机,就将config文件中的主机删除就行了;新建一个工作目录,将刚才的.vscode文件夹拷贝进来;右键点击这个主机,连接,然后输入密码,就可以连接了;这是g++的编译选项,后面的编译运行都一样;点击F1,输入remote,选择添加新用户;配置名称改成C++,编译器路径改为g++;输入ssh 用户名@服务器公网ip;原创 2023-08-01 14:23:44 · 683 阅读 · 0 评论 -
Linux知识点 -- 进程间通信(一)
在父进程fork出子进程后,子进程会拷贝父进程PCB的信息,因此在子进程的文件序列中,也会有同样的文件描述符对应的文件指针指向父进程创建的管道;在确定好父子进程的读写后,比如父进程写,子进程读,那就关闭父进程读和子进程写对应的fd,到此,一个管道就形成了;父进程创建四个子进程,使用四个管道进行进程间通信,为子进程派发任务,单机版的负载均衡;(1)进程间通信的前提,首先是要让不同的进程看到同一块内存空间(特定的结构组织的);三个sleep都是进程, 是兄弟进程,一个进程处理完数据,通过管道交给下一个进程;原创 2023-08-04 15:12:12 · 353 阅读 · 0 评论 -
Linux知识点 -- 进程间通信(二)
(1)创建了一个类,类的构造函数有创建管道文件,一旦类实例化出对象,调用构造函数,就能够创建一个管道文件,后面就是对管道文件的读写控制了;我们平常看电影前,会先买票,电影院中的座位就相当于资源,当你买了票,这个座位就真正属于你,买票的本质就是对座位的预定机制;如果信号量刚开始是5,client在申请信号量的时候,第一步就被切换了,寄存器里的数据保存为上下文数据,为了让进程间通信,让不同的进程之间,看到同一份资源,我们之前讲的所有的进程间通信都是基于这种方式;这样设计,会导致信号量是不安全的;原创 2023-08-06 17:33:55 · 483 阅读 · 0 评论 -
Linux知识点 -- 进程信号(一)
(捕捉信号)原创 2023-08-10 08:49:23 · 135 阅读 · 0 评论 -
Linux知识点 -- 进程信号(二)
cout << "获得了一个信号:" << signum << endl;return 0;运行结果:可以发现,其他信号都被自定义捕捉了,只有9号信号杀死了该进程,因为9号信号是不能被捕捉的;原创 2023-08-11 10:57:39 · 289 阅读 · 0 评论 -
Linux知识点 -- Linux多线程(一)
(其中,原创 2023-08-17 08:43:34 · 277 阅读 · 0 评论 -
Linux知识点 -- Linux多线程(二)
最终将tickets的数量减到了-1,但我们发现判断条件是tickets > 0才执行 - -操作;固定休眠时间可能会导致只有一个线程在跑,可以随即休眠时间;该线程运行了一次就卡住不动了,进入了死锁状态;第一个参数是锁的地址,第二个是锁的属性;原创 2023-08-21 20:18:48 · 240 阅读 · 0 评论 -
Linux知识点 -- Linux多线程(三)
生产者消费者模型就是一种多线程运作的模型,就像超市一样,生产者生产了商品运送到超市售卖,而消费者从超市里购买商品;共享资源:任何一个时刻只有一个执行流在进行访问,共享资源是被当作整体使用的,执行流之间都是互斥的;封装一个Task类,队列中存储这个类,类中能够调用回调函数;value:初始默认值(计数器的值)这本身是没有错的,但是不合理;pshared:是否共享。原创 2023-08-23 21:47:07 · 1223 阅读 · 0 评论 -
Linux知识点 -- Linux多线程(四)
一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。thread.hpp线程封装:lockGuard.hpp锁的封装,构建对象时直接加锁,对象析构时自动解锁;log.hpp注:(1)提取可变参数使用宏来提取可变参数:将可变原创 2023-08-28 22:54:58 · 1365 阅读 · 0 评论 -
Linux知识点 -- 网络基础 -- 基础知识
OSI (Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一-层所提供的网络来完成自己的需求。,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器,交换机;两台主机(A和B)不在同一个局域网中,他们之间需要通过路由器进行通信;但是,它既复杂又不实用;是一个逻辑上的定义和规范;原创 2023-08-29 22:07:15 · 2406 阅读 · 2 评论 -
Linux知识点 -- 网络编程套接字
socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX Domain Socket;内存中的数据存储分大端和小端,因此网络通信中不同的主机也会有不同的大小端主机之间通信;在平常使用的APP上,客户端软件发出的请求,通过网络传输到服务端软件进行处理;所有接口传入的都是struct sockaddr这个类型的地址参数;网络和域间套接字的前两个字节是不同的,在函数内部会进行判断;也可以传入其他的回调函数,完成不同的功能;更改了回调函数的类型;原创 2023-09-05 22:14:30 · 506 阅读 · 0 评论 -
Linux知识点 -- 网络基础 -- 应用层
Linux知识点 – 网络基础(二)文章目录Linux知识点 -- 网络基础(二)一、使用协议来实现一个网络版的计算器1.自定义协议2.守护进程3.使用json来完成序列化二、HTTP协议1.概念2.HTTP协议请求和响应的报文格式3.使用HTTP协议进行网络通信4.HTTP协议的方法5.HTTP协议的状态码6.HTTP协议的报头7.connetion选项一、使用协议来实现一个网络版的计算器1.自定义协议定义结构体来表示我们需要交互的信息;发送数据时将这个结构体按照一个规则转换成字符串, 接收到原创 2023-09-15 17:23:24 · 303 阅读 · 0 评论 -
Linux知识点 -- HTTPS协议
数字指纹(数据摘要)其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被窜改;每一段文本,都只能形成唯一的摘要;摘要常见算法:有MD5、SHA1、 SHA256、SHA512等, 算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低);和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比;原创 2023-09-18 22:03:48 · 239 阅读 · 0 评论 -
Linux知识点 -- 网络基础 -- 传输层
TCP协议会在内核中同时创建一个发送缓冲区和一个接收缓冲区;发送方应用层发送数据时,只管将数据写入到自己的发送缓冲区;接收方应用层读取数据的时候,只管从自己的接收缓冲区中读取数据;数据什么时候从发送方发送到接收方,一次发送多少数据,都是由操作系统通过TCP协议来控制的;UDP报文发送和接收都是一对一的,一定保证接收到一个完整报文;写100个字节数据时, 可以调用一次write写 100个字节,也可以调用100次write,每次写一个字节;原创 2023-09-25 21:40:24 · 260 阅读 · 0 评论 -
Linux知识点 -- 网络基础 -- 网络层
IP协议没有提供设备转发的具体功能,IP协议提供的是转发的策略;宏观上,我们的网络本质就是一个一个的子网构成的;数据转发的问题,本质都是子网转发;决定将数据交给下一跳路由器的时候,下一跳路由器一定和此主机在同一个局域网;原创 2023-09-28 15:08:36 · 235 阅读 · 0 评论 -
Linux知识点 -- 网络基础 -- 数据链路层
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称;原创 2023-10-09 10:01:23 · 472 阅读 · 0 评论 -
Linux知识点 -- 高级IO(一)
但是我们在Start中调用了HandlerEvent方法来获取连接,获取成功后如果还需要重新向select中添加新的fd,就很困难,因此需要更新编写代码的模式;在设置IO接口的状态或网络套接字状态的时候,有一个NONBLOCK状态,这就是非阻塞状态;可以看出select服务器可以同时关心多个fd的事件,是一个高并发的服务器;两个成员分别是单位为秒和微妙的值;能够成功获取链接,但是。原创 2023-10-12 09:53:02 · 130 阅读 · 0 评论 -
Linux知识点 -- 高级IO(二)
Linux知识点 – 高级IO(二)文章目录Linux知识点 -- 高级IO(二)一、IO多路转接 -- poll1.poll接口2.poll实现3.poll优缺点二、IO多路转接 -- epoll1.epoll接口2.epoll的工作原理3.epoll服务器实现4.epoll的优点5.epoll的工作模式6.Reactor服务器一、IO多路转接 – poll1.poll接口参数:fds:传入的struct pollfd结构体的起始地址;nfds:传入的结构体的个数;前两个参数代表所有传原创 2023-10-18 10:32:27 · 314 阅读 · 0 评论