Linux
文章平均质量分 91
linux入门实战
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
BearPot
你太容易因为别人优秀而焦虑 你需要的是平静的把自己的事做好
个人网站:http://www.potba.cn/
展开
-
connect函数会阻塞,怎么解决?
二是但是当客户端插上网线,但是连接网络失败,也就是说能够获取到ip地址,但是和服务器是ping不通的。这种情况下connect就可能会发生阻塞,因为按照《UNIX 网络编程》中讲解,connect的在进行三次握手,如果失败情况,需要等待75s的超市时间的。第一次握手时,创建连接,connect处于阻塞状态,等待服务器accept,第二次握手成功,connect从阻塞返回,accept同样的需要收到客户端ack以后才从阻塞返回,连接建立完成。这意味着在2秒内,如果连接操作没有完成,就会超时。转载 2023-09-30 17:26:24 · 1502 阅读 · 0 评论 -
手搓CAS原理实现/ 模拟mutex的lock和unlock
cas有可能会有aba的问题,解决方法:加版本号,每次数据操作就更新版本号,最后比对版本号,, 或者用加时间戳。flag的0表示现在没上锁,1表示已经上锁了。通过cas去实现自旋锁。原创 2023-09-20 22:38:37 · 129 阅读 · 0 评论 -
linux文件系统,有关链接
依此您可以做一些相关的测试,可以得到以下全部结论:1).删除符号连接f3,对f1,f2无影响;2).删除硬连接f2,对f1,f3也无影响;3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。原创 2023-05-22 13:52:47 · 629 阅读 · 0 评论 -
信号量解决生产者消费者/读写者问题
本篇用信号量来写这两种问题的示例demo,当然我更推荐用锁加条件变量去做。但是说到底信号量本身底层就是锁加条件变量去实现的,封装了这俩玩意在上面的代码中,初始化状态下消费者线程没有任务信号量资源,假设某一个消费者线程先运行,调用 pthread_mutex_lock(&mutex);对互斥锁加锁成功,然后调用 sem_wait(&csem);由于没有资源,因此被阻塞了。其余的消费者线程由于没有抢到互斥锁,因此被阻塞在互斥锁上。原创 2023-03-15 10:25:19 · 335 阅读 · 0 评论 -
LT/ET模式
前面我有讲了select和poll都是LT模式,而epoll有LT和ET两种模式,有的人就很懵,那么这一节我们就来聊聊什么是ET/LT模式epoll 对文件描述符有两种操作模式:LT(Level Trigger,电平触发)模式和 ET(Edge Trigger,边沿触发)模式。LT 模式是默认的工作模式。。原创 2022-10-24 08:07:25 · 953 阅读 · 2 评论 -
进程间的通信终章之【消息队列,信号量,共享内存】
消息队列概述:特点:消息队列的创建与使用函数接口:使用:ipcs和ipcrm用法:信号量概述:相关概念的认识:(一)进程关系(二)临界资源和临界区(三)原子操作(四)PV操作信号量接口的介绍:信号量的使用:封装系统调用:案例使用:思考:三个进程a.b,c分别输出"A","B","C",要求输出结果必须为"ABCABCABC....."共享内存概述:特点:共享内存的使用与创建共享内存接口介绍 :案例使用:进程间的通信上节讲解:进程之间的通信(管道详解)消息队列是消息的链表,存放在内存中,由内核维护。消息队列提原创 2022-08-07 09:18:31 · 694 阅读 · 7 评论 -
多进程/多线程实现服务器的并发
上一节提到的 TCP Socket 调用流程是最简单、最基本的,它基本只能一对一通信,因为使用的是同步阻塞的方式,当服务端在还没处理完一个客户端的网络 I/O 时,或者 读写操作发生阻塞时,其他客户端是无法与服务端连接的。本节我们讲讲最简单的两种方式,使用多线程和多进程实现服务器的并发。原创 2022-09-24 16:58:14 · 1881 阅读 · 3 评论 -
I/O复用--浅谈epoll
为了针对许多大量连接,高并发的的场景下大量的资源消耗,效率低的问题,这一节就浅浅来聊一下epoll,epoll是之前的select和poll的增强版本,是linux操作系统独有的I/O复用技术。对于epoll来说他更灵活,解决了select和poll的弊端,使用起来也更加方便顺手,他不像select和poll那样只提供了一个方法,epoll提供了一组方法。本节呢就是聊聊epoll的使用和一些优点,对于epoll的两种触犯机制ET和LT的探讨会放在下一节去聊聊,注意select和poll只是LT。原创 2022-10-21 21:10:43 · 611 阅读 · 4 评论 -
Linux线程同步(1)
如果线程 A 执行这个过程期间就失去了 CPU 时间片,线程 A 被挂起了最新的数据没能更新到物理内存。线程 B 变成运行态之后从物理内存读数据,很显然它没有拿到最新数据,只能基于旧的数据往后数,然后失去 CPU 时间片挂起。线程 A 得到 CPU时间片变成运行态,第一件事儿就是将上次没更新到内存的数据更新到内存,但是这样会导致线程 B已经更新到内存的数据被覆盖,活儿白干了,最终导致有些数据会被重复数很多次。原创 2022-09-16 22:31:39 · 953 阅读 · 0 评论 -
线程同步的几种方式(2)
互斥锁是线程同步最常用的一种方式,通过互斥锁可以锁定一个代码块,被锁定的这个代码块,所有的线程只能顺序执行 (不能并行处理),这样多线程访问共享资源数据混乱的问题就可以被解决了,需要付出的代价就是执行效率的降低,因为默认临界区多个线程是可以并行处理的,现在只能串行处理。调用这个函数,如果读写锁是打开的,那么加锁成功;当线程调用这个函数,并且 sem 中的资源数 >0,线程不会阻塞,线程会占用 sem 中的一个资源,因此资源数 - 1,直到 sem 中的资源数减为 0 时,资源被耗尽,因此线程也就被阻塞了。原创 2022-09-18 10:48:50 · 336 阅读 · 7 评论 -
Linux多线程第一讲——线程的创建和基本使用
线程,又被称为轻量级进程,是操作系统CPU调度执行的最小单位线程就是进程内部的一条执行路径,或者一个执行序列;一个进程必须至少包含一个线程也可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。一个正在运行的软件就是一个进程,一个进程可以同时运行多个任务( 每个运行任务就是一个线程), 可以简单的认为进程是线程的集合。.........原创 2022-08-18 11:15:00 · 1547 阅读 · 5 评论 -
Linux下Socket编程
学习socket编程前要先明白网络应用程序通信流程应用程序 A 要将数据”hello” 传给网络上另外一台主机上的应用程序 B, 数据“hello”从应用层发送给传输层后,传输层在数据前面加上 tcp 协议或 udp 协议的报头,将整条报文发给网络层,网络层添加自己的 IP 报头,再将整条数据发送给数据链路层。数据链路层将数据封装成能在网络中独立传输的数据单元,即数据帧。封装好的数据帧通过网络传输到另一台主机,然后再从下层依次拆包,将数据部分送往应用层。应用程序 B 就得到了数据” hello”。原创 2022-09-20 16:46:33 · 1840 阅读 · 4 评论 -
I/O复用--poll系统调用
并用用户事件描述符对fd,events进行初始化,返回时就绪事件就在revents里面存储。可以看到。原创 2022-10-18 10:39:09 · 329 阅读 · 2 评论 -
Linux孤儿进程|僵尸进程
用fork创建子进程后,子进程执行的是和父进程相同的程序(但有可能执行不同的代码分支),若想让子进程执行另一个程序,往往需要调用一种exec函数。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,并从新程序的启动例程开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用一个全新的程序替换了当前进程的正文、数据、堆和栈段。在Linux中使用exec函数组主要有以下两种情况。原创 2022-09-12 10:40:34 · 557 阅读 · 5 评论 -
从0开始教你编写Makefile文件
编写Makefile第一步,了解什么是Makefile?每当我们写大型项目时,一般需要很多源文件,源文件会在不同的目录中的文件夹里面包含着,这样我们所有的源文件不会在一个文件中包含,用gcc-omain所有的.c文件来编译,就很麻烦了,你需要记住所有的.c文件,那么为了方便编译链接,就此诞生。在学习Makefile之前,首先介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。.obj.o.lib.a)。..........原创 2022-07-21 18:54:35 · 11151 阅读 · 16 评论 -
I/O复用--select系统调用
一个进程虽然任一时刻只能处理一个请求,但是处理每个请求的事件时,耗时控制在 1 毫秒以内,这样 1 秒内就可以处理上千个请求,把时间拉长来看,多个请求复用了一个进程,这就是多路复用,这种思想很类似一个 CPU 并发多个进程,所以也叫做时分多路复用。I/O复用,它可以同时监听多个客户端描述符,哪个描述符有业务了再去处理它。原创 2022-10-17 10:19:14 · 666 阅读 · 2 评论 -
进程之间的通信(管道详解)
每个进程的空间地址是独立的,因此进程与进程之间是不能相互访问的,要进行进程间通讯,必须通过内核,内核会开辟一段特殊的内存空间,进程可以在这块内存空间进行数据的交换。管道是一个重要的通信机制,思想是在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息,由于这种方式具有单向传递数据的特点(),所以称为管道,即在某一时刻只能一端读数据一端写数据。根据使用方式和通信对象将它分为无名管道,有名管道(命名管道)两类无论有名还是无名,写入管道的数据都在内存中主要用于不相关的进程间通信。.........原创 2022-07-25 12:15:00 · 2269 阅读 · 7 评论 -
fork函数详解
首先了解什么是fork?一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。上面的话通俗理解就是: fork是复制进程的函数,程序一开始就会产生一个进程,当这个进程(代码)执行到fork原创 2022-05-18 22:56:18 · 45901 阅读 · 43 评论 -
Linux常用命令及操作演示(细节满满)
一、目录操作命令1.1 目录切换(1)绝对路径绝对路径名是沿着层次树,从根目录(/)开始,由到达相应文件的所有目录名连接而成的,各目录名之间以 / 字符隔开/home/stu/dir218/home/stu/桌面(2)相对路径是从当前目录开始到指定位置的相对路径;. 代表当前目录.. 代表该目录的父目录(上一层目录)1.2 目录查看1.3 创建目录1.4 删除目录1.5 修改目录(重命名,剪切)将tmp1下的k原创 2022-05-08 16:02:56 · 2643 阅读 · 4 评论