Linux学习笔记
RayCongLiang
广东海洋大学16级物联网学生
展开
-
【Linux学习笔记62】UNIX域套接字
引言在之前的笔记写的socket笔记,是通信方式中的一种扩展,前面笔记的socket都使用地址IP实现通信。实际上,socket可以使用在不需要IP的场合,即本地通信。(与进程间的通信(一)(匿名管道与有名管道)一样)UNIX域套接字相比于前面的管道等提供的信息更多,比如:UNIX域可以等待对端的连接(与TCP类似),又可以实现帧同步(UDP类似)本地域套接字的使用字节流本地域套接字(不提...原创 2019-09-25 17:00:55 · 311 阅读 · 0 评论 -
【Linux学习笔记46】线程的同步(POSIX匿名信号量)
引言之前也记录过POSIX有名信号量的使用,那么POSIX有名信号量主要用于进程之间通信【Linux学习笔记42】进程间的通信(四)(POSIX有名信号量)那么,这一篇笔记主要是记录线程之间的POSIX匿名信号量。为了实现线程之间的同步,可以使用POSIX匿名信号量来实现。POSIX有名与匿名信号量的区别POSIX有名信号量会使用指针使用sem_open函数打开系统中的文件,即POSIX...原创 2019-09-01 11:08:00 · 287 阅读 · 0 评论 -
【Linux学习笔记45】线程的互斥锁与读写锁
线程的互斥锁当我们访问一个资源,但是这个资源不能同时被访问的时候,我们可以使用线程的互斥锁来解决这个问题,当线程1要访问资源的时候,加入互斥锁,防止线程2或者其他线程同时访问该资源代码的实现1.定义互斥锁:pthread_mutex_t m;2.初始化互斥锁:pthread_mutex_init(&m,NULL); 3.使用互斥锁(上锁)pthread_mutex_l...原创 2019-08-31 23:23:47 · 217 阅读 · 0 评论 -
【Linux学习笔记44】线程的调度策略与优先级
Linux中如何体现优先级静态优先级:级别为0~99的100个优先级:0级为普通,1 ~ 99级为实时动态优先级:当静态优先级为0时,就以动态优先级加以区分,级别为-19~20(nice值),Nice值越大,优先级越低例如:两个都为0级的静态优先级线程:p1,p2p1的nice为20,p2的nice为-10。则,p2比p1优先级更高。...原创 2019-08-27 01:29:02 · 761 阅读 · 1 评论 -
【Linux学习笔记40】SYS-V 进程间的通信(二)(消息队列)
引言回忆一下之前的管道,存在的弊端是管道中的数据并没有做任何标记,因此无法读取指定的数据,并且读者只通信,只能按照次序读数据。在多进程之间通信只能使用多条管道来分别处理。那么消息队列可以理解为增强型的管道,能够提供一种带有数据标识的特殊管道,使得每段写入的数据都具备标识,读取数据只要指定标识读取即可,并且不会受到其他消息的干扰。消息队列代码实现1.创建消息队列 msgget2.发送消息...原创 2019-08-23 13:00:56 · 236 阅读 · 0 评论 -
【Linux学习笔记39】SYS-V 进程间的通信(一)(共享内存)
系统V(五)的IPC原理假设用户中有P1,P2,P3三个进程,那么在SYS-V系统内核中存在IPC对象以供它们进行通信在IPC对象中使用KEY来表示IPC对象那么每个进程都会使用IPC对象,每个进程打开IPC对象都有相对应的id,然后进程就会根据id来操作IPC对象一般使用的IPC对象有:共享内存、消息队列、信号量等如何在系统中查看IPC对象:ipcs -a 表示查看系统中...原创 2019-08-23 12:18:07 · 262 阅读 · 0 评论 -
【Linux学习笔记41】SYS-V 进程间的通信(三)(信号量)
信号量的简介信号量是代表一类资源。在编程中,如果要使用资源,首先要知道是否有资源可用。以之前的共享内存为例子,P1往共享内存写入数据的操作首先要申请资源,申请成功后才能往共享内存中写入数据,那么写入成功后,整个共享内存中的资源就会减一。那么信号量就是指这个共享内存中的资源。P1写入数据到SHM,首先要申请空间:P(s1)P1申请资源成功,写入数据到SHM:V(s2)P2申请从SHM读出...原创 2019-08-23 14:53:57 · 441 阅读 · 0 评论 -
【Linux学习笔记38】进程间的通信(三)(信号的嵌套,挂起,信号安全)
引言上一篇笔记主要是介绍了信号的核心API,但是信号还是存在一些特征:比如说信号在响应信号的过程中,有另外一个信号过来会不会发生嵌套?或者多个信号进行访问,进程应该是有序响应还是丢弃呢?或者进程设置信号的阻塞掩码,子进程是否会继承呢?或者挂起的信号是否也会继承给子进程?那么这篇笔记主要是解答以上几个问题。阻塞掩码是否会被子进程继承?代码实现:代码运行结果:因此结论是:...原创 2019-08-22 17:20:33 · 1043 阅读 · 0 评论 -
【Linux学习笔记37】进程间的通信(二)(信号机制:发送,缺省,忽略,捕捉)
异步信号介绍信号大部分都是以异步的机制存在的。异步指的是信号随时会发生,不随规律或者控制所限制。下面先介绍一下Linux系统中有哪些信号:kill -l红色:非实时信号(非可靠信号):这种信号没有优先级,可以相互嵌套,如果目标进程没有及时相应非实时信号,那么随后到达的该信号将会被丢弃。绿色:实时信号(可靠信号):具有优先级。实时信号的相应次序是按照接收顺序排队,不嵌套。因此即使实时信...原创 2019-08-22 13:01:14 · 809 阅读 · 0 评论 -
【Linux学习笔记31】标准IO的缓冲类型
引言我们之所以倾向于使用标准IO不仅是其功能比系统IO丰富,还有是因为标准IO有个很显著的地方就是标准IO拥有缓冲功能,能够提高程序的吞吐量。那么这篇笔记主要是研究标准IO是什么时候刷新数据到内核:标准IO缓冲区的三种类型一、不缓冲虽然说标准IO分配了缓冲区buffer,但是这种方法并不缓冲就直接将数据刷新了。那么一般会用到这种类型的数据:紧急数据(出错处理)举个例子:在打开屏幕这个文...原创 2019-08-16 22:40:59 · 1083 阅读 · 0 评论 -
【Linux学习笔记36】进程间的通信(一)(匿名管道与有名管道)
Linux下进程间通信概述传统的进程间通信方式无名(匿名)管道(pipe) 最简单,只能用于一对一亲缘进程的少量数据传输有名管道(fifo)信号(signal) 异步方式System V IPC对象共享内存(share memory) 适合于大数据量传输,不经过内核中转消息队列(message queue)信号量(semaphore)POSIX信号量(无名、有名)BS...原创 2019-08-21 15:50:55 · 345 阅读 · 0 评论 -
【Linux学习笔记25】教你写插件式高级开发程序(巧用静态库与动态库)
引言本章有涉及到一些工程文件的组织方面的内容,由于之前已经写过类似的笔记,这次就不再多啰嗦了,如果有朋友有兴趣想去补充一下这方面知识,可以参考本人之前的文章- - 【C语言基础补充7】使用预处理让你的代码不再臃肿在做项目开发的过程中,每个程序员都应该具备一个长远的思想,要让自己的代码拥有更加强的续航能力以及更强的适应能力,那么这一篇博客可能能够帮到你!原理不要将所有函数,头文件都放在ma...原创 2019-08-12 15:21:50 · 462 阅读 · 0 评论 -
【Linux学习笔记30】标准IO的核心API
引言这篇笔记类似与之前的系统IO的核心API介绍,虽然不是很详细地说清楚每个函数的作用,但还是会讲清楚函数的使用以及区别。本篇主要介绍:fgetc/getc/getchar函数与fputc/putc/putcharfeof/ferror 、fgets/gets与/fputs/puts、fread/fwrite等函数fgetc/getc/getchar函数这一组函数的功能都是读数据,每一次...原创 2019-08-16 01:20:29 · 197 阅读 · 0 评论 -
【Linux学习笔记29】标准IO初简介(fopen函数)
引言回顾一下之前的系统IO,系统IO与标准IO都是我们操作文件的接口。而标准IO比系统IO的功能更加丰富,因为其功能是由标准库提供的。并且最重要的是,标准IO是带有缓冲的,就能够提高程序的吞吐量。标准IO的特点标准IO的操作对象是文件指针标准IO由标准库提供,因此功能更加丰富。标准IO带有缓冲,能够提高程序的吞吐量,尤其是在处理大量数据的情况下,尤为出色。文件指针与文件描述符的关系...原创 2019-08-16 00:14:38 · 331 阅读 · 0 评论 -
【Linux学习笔记47】线程的退出与取消
线程的退出之前的线程笔记都有接触线程的退出,那么需要注意的是,一条线程的退出是独立的,与其他线程没有关系。线程的取消除了线程的主动退出,还有取消线程的做法,如果存在多余线程或者线程的运行方法不好,都可以通过动态取消线程来减少程序的资源开支。...原创 2019-09-03 13:36:43 · 738 阅读 · 0 评论 -
【Linux学习笔记48】线程的死锁及其避免死锁的方法
线程的死锁在上一篇笔记记录的线程的退出与取消,存在着一个线程死锁的隐患:一个线程正在加锁运行代码,正常情况下应该是运行结束后,线程解锁。但是在线程正在运行的时候,cancel命令来了,让线程退出,而导致该线程一直处于加锁状态。防止线程死锁的方法1.加锁之前做准备:将解锁函数放入函数f()2.使用push(f)函数将f()函数压栈3.如果加锁状态,cancel命令来了,程序也不会马上取消...原创 2019-09-03 23:25:11 · 322 阅读 · 0 评论 -
【Linux学习笔记49】线程池机制
引言线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。如果一个程序任务比较多,那么我们可以使用多线程来分担任务,但是并不是线程越多越好,虽然创建的线程被称为轻量级线程,但也占用资源。因此,需要线程池机制来维持整个程序的进行。线程池机制在一开始的时候,创建若干条线程,然后使其处于睡眠状态等待任务。主线程接收任务,然后唤醒线程,并然其承担任务。如果线...原创 2019-09-11 23:19:48 · 201 阅读 · 0 评论 -
【Linux学习笔61】广播与组播
引言广播与组播,顾名思义就是一对多进行通信的关系。那么很容易理解就是,TCP是点对点的单播通信,只有UDP中才存在广播与组播。广播同时将数据发给局域网中的所有主机,称之为广播。广播地址:以192.168.1.0(255.255.255.0)为例子,最大的主机地址为:192.168.1.255代表该网段的广播地址。因此我们能只需要发到该地址的数据包就可以让整个局域网的主机都接收。255...原创 2019-09-25 16:27:36 · 500 阅读 · 0 评论 -
【Linux学习笔记60】网络的带外数据(紧急数据)
引言只有TCP才有带外数据,UDP是没有的。网上也有一种说法,TCP没有真正意义上的“带外数据”。这种说法的由来是在TCP协议中,服务端与客户端之间都通过管道传输数据,比如传输的数据是1字节,没有超过socket中设置的缓冲池的限制的话,这个数据是要等到数据达到缓冲区上限才可以到达对端的。而“带外数据”也并没有什么捷径,也是一样通过这种方法到达对端,只不过会将其标志为紧急数据,提前让对端释放...原创 2019-09-25 15:49:41 · 388 阅读 · 0 评论 -
【Linux学习笔记59】超时控制的四种方法
引言在网络的配置中,有两个概念分别为:阻塞,非阻塞。阻塞情况下,当读一个socket套接字,即使没有数据也会一直等待。而非阻塞情况下,当读一个socket套接字,只会检测一瞬间,如果没有数据就离开,有数据则读出。这两种都是比较极端的方法,因此就有一个中间状态:超时控制。超时控制会是比较常用介于阻塞与非阻塞的一种方法,既不是无限等待数据的到来,也不是只等待一瞬间,可以设置为5分钟或者10分钟都可...原创 2019-09-24 20:46:23 · 643 阅读 · 0 评论 -
【Linux学习笔记58】套接字的属性
引言套接字与文件描述符一样,都拥有很多特性,那么本篇笔记主要记录一些套接字的属性以及设置。套接字的属性名称属性SO_BROADCAST允许发送广播数据SO_DEBUG允许调试SO_DONTROUTE不查找路由SO_ERROR获得套接字错误SO_KEEPALIVE保持连接SO_LINGER延迟关闭连接SO_OOBINLINE...原创 2019-09-24 13:55:49 · 1014 阅读 · 0 评论 -
【Linux学习笔记57】TCP服务器IO模型之多路复用(二)SELECT函数
引言接着上一篇笔记的POLL函数实现TCP服务器的多路复用,本篇笔记主要是以SELECT函数实现服务器的多路复用。实现思路socket中有四个描述符,本质上都是阻塞,并且阻塞在一个端点上因此,使用文件描述符集合fd_set将关心的描述符放入集合中然后通过使用Select函数监听这个集合中的描述符Select函数会不断的变化,因此当有连接来访问以及数据同时访问的时候,listenfd...原创 2019-09-20 17:18:17 · 349 阅读 · 0 评论 -
【Linux学习笔记56】TCP服务器IO模型之多路复用(一)POLL函数
引言上一篇笔记介绍了多种TCP服务器处理多套接字的方法,本篇笔记主要内容是记录实现TCP服务器多路复用的POLL函数的使用方法。实现思想poll函数的原理假设服务器中有三个不同的套接字负责不同的任务为每个套接字建立独有的pollfd结构体并且在结构体中拥有events存放结构体负责的事件:读事件,写事件,报错事件等将以上的所有结构体组成一个结构体数组作为poll函数的参数以供使用...原创 2019-09-20 14:35:17 · 550 阅读 · 0 评论 -
【Linux学习笔记55】TCP服务器IO模型之非阻塞轮询
引言之前都介绍了多线程,多进程的方式解决各种TCP服务器的问题。那么本篇笔记主要记录单进程非阻塞的方式处理TCP服务器的服务。使用的方法就是轮询的机制处理,虽然这种方法很少使用,因为其占用的CPU资源很多,但是还是很有必要了解一下。各种模型的理解图第一种是前面笔记的多线程TCP服务端之简易QQ/多进程处理TCP服务器IO模型之并发阻塞处理多任务的方式第二种是本篇笔记的主要内容,单进程要...原创 2019-09-18 21:14:52 · 525 阅读 · 4 评论 -
【Linux学习笔记54】多进程处理TCP服务器IO模型之并发阻塞
引言这一篇笔记主要记录在TCP服务器中,如果连接端点都是阻塞的,我们应该如何处理。TCP是面向连接的,在服务端中,需要先进行连接,再通信。因此就存在一个监听套接字,专门监听对端的连接请求。那么,当存在多个对端的连接请求的时候,当达到服务器的连接上限后,如果服务器要读其中一个端的数据的时候,就不能做其他事情,只有当一件事完成后才能做下一件事,也就是存在阻塞。为了解决这个问题,我们可以使用多进程来...原创 2019-09-18 00:26:47 · 331 阅读 · 2 评论 -
【Linux学习笔记53】UDP服务器IO模型之信号驱动
引言上一篇笔记简单介绍了UDP协议的用法,这篇笔记主要是使用信号驱动的方式获得IO的数据。那么,这种方式只使用于UDP,==并不适用于TCP。==因为,TCP需要建立连接,每产生一个事件都会触发信号,比如说连接,连接确认,数据确认,断开连接等事件,都会触发信号。因此,TCP对应的事件过多,需要大部分精力解释信号。UDP异步信号的工作方式在应用层中会创建UDP的套接字,并且使用该套接字与硬...原创 2019-09-17 20:59:56 · 510 阅读 · 0 评论 -
【Linux学习笔记52】socket编程之UDP协议
引言TCP是一种有连接的网络协议,UDP是一种无连接的通信网络协议。两者相比之下,UDP会显得简单些。本篇笔记主要记录UDP协议的实现。实现思路服务器创建套接字服务器套接字绑定ip地址以及端口号与TCP连接不同的是,UDP使用recvfrom()函数来等待接收数据,而不能使用TCP中的read()函数。因为read只有数据,没有地址。UDP每次连接都需要有地址,因此使用recvfro...原创 2019-09-17 14:59:09 · 295 阅读 · 1 评论 -
【Linux学习笔记51】多线程TCP服务端之简易QQ
引言本篇笔记主要记录使用多线程的方式来实现,多个客户端之间进行通信,由服务器将信息进行转发。运行原理使用链表管理客户端主线程主要负责等待连接,当有客户端1连接,在链表创建新的节点,并且创建新的线程s1负责与客户端进行通信。客户端2连接时,也会创建对应的线程负责。s1子线程等待客户端发送数据客户端1中的s3负责等待键盘键入的数据,然后线程s2负责将键入的数据发送到服务器中服务器s1...原创 2019-09-15 23:49:18 · 258 阅读 · 0 评论 -
【Linux学习笔记43】线程的创建以及属性设置
引言在Linux内核中其实并没有线程与进程的概念,只有任务概念。那么进程与线程的关系在:【Linux学习笔记32】进程与线程的基本理解也有记录过。所以这一篇笔记主要介绍线程的创建以及属性设置。为什么要在进程中创建多条线程?每一条线程都有自己独立的执行状态线程共享进程中的所有资源创建线程int pthread_creat(pthread_t *thread, const pthr...原创 2019-08-26 16:53:40 · 223 阅读 · 0 评论 -
【Linux学习笔记50】socket编程之TCP协议
socketsocket的意思是插座,插口的意思。那么在网络编程上,也顾名思义:两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket也为TCP/IP等协议提供了开发的接口。网络编程的流程:OSI模型与TCP/IP协议的对应关系如图所示socket在上面的关系中充当接口(蓝色)socket提供...原创 2019-09-14 23:29:24 · 220 阅读 · 0 评论 -
【Linux学习笔记35】教你写精灵进程(附精灵进程模板)
引言精灵进程又称守护进程。进程负责程序的基本服务,但是我们也希望这种服务能够在后台持续的进程,不会因为用户的切换或者登录终端的关闭而停止。阅读本篇笔记应该补充的预备知识: 【Linux学习笔记35(补充)】进程的对话期概念精灵进程代码的编写...原创 2019-08-20 13:46:45 · 221 阅读 · 0 评论 -
【Linux学习笔记42】进程间的通信(四)(POSIX有名信号量)
引言上一篇笔记记录了系统五的信号量,能够让共享内存中的读写操作进行同步。而POSIX有名信号量是单独的变量(即将系统五信号量中的信号量元素单独讨论)。POSIX有名信号量与SYS-V信号量相同地方:逻辑相同:都代表资源都存在于进程之外:POSIX:/dev/shm SYS-V:内核都用于同步进程POSIX有名信号量与SYS-V信号量不同地方:相对而言,SYS-V信号量操作复杂...原创 2019-08-24 00:26:49 · 236 阅读 · 0 评论 -
【Linux学习笔记16】系统分区中的目录与文件结构
这一次的笔记主要是记载Linux系统中的文件或者目录等统称文件都放在哪儿,以及分区是由什么组成的。首先回答第一个问题,我们Linux系统中的统称文件就应该放在我们的分区之中。那么,我们的分区的结构是怎么样的呢?我们以下面以一张图来讲解:首先可以看到Linux的分区由三个部分组成:超级块,i-node组,data域超级块:在超级块中存放着链表来管理整个分区,将data域中的空闲域链接起来...原创 2019-07-12 12:51:14 · 164 阅读 · 0 评论 -
【Linux学习笔记2】第一次打开Centos系统遇到的问题
相信很多小白像我这样第一次接触虚拟机,第一次接触Linux系统,感觉与Window系统有点不习惯。 当我们第一次进入Linux系统的界面的时候,是没有像WIndow系统的那么好看的,因为这个Linux系统是最小化安装,并不像WINDOW一样拥有许许多多的图形以及界面。但是我觉得一开始的操作也是万变不离其宗的。 很简单,第一步肯定是根据刚刚安装Centos的时候,输入本系统的...原创 2018-08-03 15:45:48 · 466 阅读 · 0 评论 -
【Linux学习笔记15】Windows系统与Linux系统的分区区别
Windows系统的分区:Windows系统主要是将磁盘分成几个分区(C盘,D盘等等),因此Windows系统中是先有分区,再有目录(文件夹),也就是把文件放入盘中。Windows中的文件夹或者分区相当于一个容器中的容器(可以想象类似于俄罗斯套娃的做法)Linux系统的分区:Linux系统首先有一个目录,也就是我们常常说的根目录 / 。然后再有分区,要把分区通过挂载的方式,挂载到根目录之中,...原创 2019-07-10 22:32:41 · 2067 阅读 · 0 评论 -
【Linux学习笔记14】Ubuntu12.04,14.04,18.04系统的网络配置以及网络相关事宜
相信很多朋友看到标题就会有个疑问,为什么写三个系统的网络配置呢?系统的网络配置的方法不是应该相似才对吗?我的回答是:没错。但是,以上三个系统都是我的配置网络而重新下载使用的系统,其中,每个系统在配置网络方面我都遇到了各种各样的坑,自己也一而再再而三地上网查找很多资料,有雷同,但始终解决不了,下面我会一 一记录。Ubuntu12.04一、确保你的网线是否插好!!!二、将虚拟机的设置,设置为网...原创 2019-06-30 16:32:12 · 835 阅读 · 0 评论 -
【Linux学习笔记11】移动文件,目录的mv命令以及关于查看文件的技巧
首先给大家分享一下移动文件、目录的命令—mv命令(move) (这里不会像前面那么详细地说,因为与前一篇的cp命令有很多相同点,重头戏在查看文件的技巧) mv命令:用于移动文件或者目录mv /tmp/CJlinux/1/2/1.txt /tmp/CJlinux/1/2/2.txt 这里移动的目录是相同的,相当于把这个文件改名那么mv指令在移动文件到另外一个目录,存在...原创 2018-09-14 18:41:43 · 1026 阅读 · 0 评论 -
【Linux学习笔记13】设置默认权限(umask命令)以及隐藏权限(chattr、lsattr命令)
这次给大家分享一下如何设置Linux系统中的默认权限。那么,我首先通过创建一个目录,一个文件来看看它们的默认权限是什么如果不知道为什么目录的权限我说是755 可以看笔记12这里简单再介绍一下 r=4 w=2 x=1这里延申一个知识点就是:目录的权限中不管是那个用户级一定会有x权限(执行),如果没有这个x权限,那目录就连访问的权限也没有了,那就没有意义。而文件就并不这样子,文件...原创 2018-09-19 20:47:00 · 1377 阅读 · 0 评论 -
【Linux学习笔记10】总结cp命令---如何使用命令复制文件、目录
这次给大家分享几个命令,在我们使用虚拟机的时候,如果要像我们操作Window系统一样,把一些文件进行复制,需要用到的命令—cp命令 cp命令(copy): 我们使用 cp /tmp/CJlinux/1/2/1.txt /tmp/CJlinux/1/2.txt 命令来对CJlinux中的2目录中的1.txt文件的内容拷贝到 CJlinux 中的目录1中的2.txt文件中(这个2.txt...原创 2018-09-13 15:12:32 · 5433 阅读 · 1 评论 -
【Linux学习笔记9】总结环境变量PATH与设置环境变量
之前其实都有接触过which命令,并且使用which命令可以很快捷地找到一些命令的路径以及别名(alias)。但是which命令的主要工作原理是什么呢? 其实总的来说都是来自于这里: echo $PATH ``` (环境变量)因此在这些目录下的命令,都不需要敲绝对路径。其实严格地来说,我们敲一个命令,应该要先敲它的绝对路径,才能找到这个命令。不然,系统是不知道这个命令是在哪...原创 2018-09-12 20:52:16 · 408 阅读 · 0 评论