
linux
一把大锤子
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux】linux经典面试题目---其他类
一、程序加载到内存上有哪些段,运行时的临时变量放在哪?1、.text段指令段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。2、.data段数据段:通常是指用来存放程序中已始化且不为0的全局变量和静态变量的一块内存区域。数据段属于静态内存分配。常量也放在这个区域。3、.bss段数据段:通常是指用来存放程序中未初始化或者初始化为0的全原创 2020-08-03 19:51:54 · 202 阅读 · 0 评论 -
Linux经典面试题目---系统类
一、虚拟内存是什么为了防止内存不足导致死机,系统会在硬盘上开辟一块空间,linux是一个固定的分区,windows是一个文件,就叫作虚拟内存。系统会按照某种策略在适当的时候将物理内存中的部分数据移动到虚拟内存中,以节省物理内存。linux是当物理内存不够用的时候,使用虚拟内存。windows会将长时间未使用的数据移动到虚拟内存。二、用户态和内核态能解释一下吗1、当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代原创 2020-08-01 20:23:56 · 381 阅读 · 0 评论 -
【Linux】Linux经典面试题---网络部分
一、 OSI 七层网络协议模型和 TCP/IP 四层网络协议模型二、tcp 三次握手,四次挥手,为什么是三次?为什么是四次?time_wait 出现 在什么时候,它的作用是什么?TIME_WAIT 状态持续多长时间?三次握手,哪一个 阶段会抛出异常详见博客:TCP的三报文握手和四报文挥手相关面试题三、 http长连接和短连接的区别1、短连接连接->传输数据->关闭连接HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。也可以这样说:短连原创 2020-07-30 20:54:57 · 951 阅读 · 0 评论 -
【Linux】Linux面试经典题目---进程和线程部分
一、 进程和线程的区别进程与资源分配有关,进程有自己的独立地址空间,程序更加健壮,但是通信较麻烦,线程是资源调度的最小单位,是共享进程中的数据的,开销更小,通信更加便利。它们二者之间的区别为:1、进程与资源分配有关,进程有自己的独立地址空间,程序更加健壮,但是通信较麻烦,线程是资源调度的最小单位,是共享进程中的数据的,开销更小,通信更加便利。2、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)3、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表原创 2020-07-26 21:11:11 · 883 阅读 · 0 评论 -
【Linux】Linux系统下libevent库的安装
1、首先进行libevent版本的下载。可以去libevent的官网进行下载。地址为:https://libevent.org/2、将下载的libevent拖拽到linux系统的桌面3、在linux中进入到桌面,因为我们将这个库放在了桌面。cd Desktop4、进行解压tar zxf 下载的库名由于我下载的是2.0.19的版本,所以他出来的是2.0.19的版本。(版本名称尽量不要自己输入,有可能会输入错误,当输入libevent时它会自动弹出与libevent有关的文件,只要按t原创 2020-07-17 17:47:15 · 1555 阅读 · 2 评论 -
【Linux】高性能服务器程序框架
服务器解构的分类服务器解构主要分为如下三个主要模块:1、I/O处理单元。接收客户端发送的数据都属于I/O处理单元。2、逻辑单元。接收到数据之后进行的一些处理都属于逻辑单元。3、存储单元。如下图所示(服务器编程框架):服务器模型的分类1、C/S模型C就是客户端,S就是服务器。所以这个模型也称客户端/服务器模型。C/S模型如下图所示:现在大多数的公司用的都是C/S模型。也就是一组服务器,所有的客户端要上网的时候都要访问这个服务器。C/S模型的逻辑C/S模型的逻辑很简单,服务器启动后,原创 2020-07-17 16:32:49 · 405 阅读 · 0 评论 -
【Linux】线程池以及利用线程池实现TCP服务器程序
线程池的引入多进程多线程创建的时机是事件就绪后,为处理这个就绪事件创建子进程或者函数线程。结束的时机是将事件处理完成之后结束相应的子进程或者函数线程。这个时候服务器就会有很严重的效率问题,当服务器运行起来之后频繁得创建和结束对系统的负担是很重的。问题如下:是需要消耗时间和系统资源的。而且当系统运行起来之后就会有不可预知的崩溃。对于客户端的响应速度相对较慢。事件就绪和处理事件之间存在创建进程或者线程的过程。如果服务器的系统上存在大量的进程或者线程,就需要不断的进行进程或者线程的切换,从而致使原创 2020-07-16 17:24:17 · 593 阅读 · 0 评论 -
【Linux】epoll的LT触发模式和ET触发模式
概念LT模式:内核如果检测到就绪事件并将其通知给应用程序后,应用程序可以不立即处理该事件,因为下次调用epoll_wait时,还会将此事件通知给应用程序。(不会重复触发事件)ET模式:内核如果检测就绪事件并将其通知给应用程序后,应用程序必须立即处理该事件,否则下次调用epoll_wait时,不会将此事件再通知给应用程序。(同一事件会被触发多次)实例分析客户端模型发送11字节的数据到服务端,ET模式只触发一次,而LT模式要触发3次。再次证明了ET模式要比LT模式触发的次数少很多。Linux系统下写的原创 2020-07-06 16:45:12 · 634 阅读 · 0 评论 -
I/O复用之select、poll、epoll的使用和区别
I/O复用I/O复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的读写操作。I/O复用适用如下场合:1、当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用。2、当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。3、如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。4、如果一个服务器即要处理TCP,又原创 2020-07-05 17:34:50 · 312 阅读 · 0 评论 -
【Linux】TCP的三报文握手和四报文挥手相关面试题
三报文握手TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的建立和释放是每一次面向连接的通讯通信中必不可少的过程。因此,运输连接就有三个阶段连接,即,建立数据传送和连接释放TCP连接的建立采用客户服务器的方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。一、三报文握手的过程TCP的建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。这也就是三报文握手的过程。如下图所示:它的过程如下所述:一开始,B的TCP服务器进程先原创 2020-05-30 16:57:54 · 852 阅读 · 0 评论 -
【Linux】UDP编程流程
UDP一、定义UDP是无连接不可靠的数据报服务二、UDP服务器的系统调用1、方法(1)int socket();创建一个用于监听客户端连接的网络套接字原型:int socket(int domain, int type, int protocol)成功返回套接字的文件描述符,失败返回-1domain:协议簇 SOCK_DGRAMtype:具体的协议 SOCK_STREAM(TCP) SOCK_DGRAM(UDP)protocol:默认值为0(2)int bind();将创原创 2020-05-18 10:56:54 · 974 阅读 · 1 评论 -
【Linux】TCP协议的编程流程
TCP协议一、定义TCP协议是面向连接的可靠的字节流服务TCP协议分为客户端和服务端服务器是被动通讯,客户端是主动通讯二、服务器的系统调用1、方法(1)int socket();创建一个用于监听客户端连接的网络套接字原型:int socket(int domain, int type, int protocol)成功返回套接字的文件描述符,失败返回-1domain:协议簇 AF_INETtype:具体的协议 SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)pr原创 2020-05-15 20:24:41 · 203 阅读 · 0 评论 -
【Linux】线程安全问题
线程安全一、线程安全的定义线程安全就是在多线程运行的时候,不论线程的调度顺序怎样,最终的结果都是一样的,正确的,那么就说这些线程是安全的。二、如何保证线程是安全的1、对线程同步,保证同一时刻只有一个线程访问临界资源先看一段线程不安全的代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#i原创 2020-05-13 17:02:16 · 405 阅读 · 0 评论 -
【Linux】线程同步
线程同步一、什么是线程同步线程同步和进程同步一样都是解决线程之间的竞争关系与协作关系。线程就像是进程的一个化身,当创建进程去做一些事情的时候,效率有时候并不是很高,系统的负担也会重。这时候就可以用线程来做。二、线程同步的四种方式1、互斥量(互斥锁)(1)概念锁只有两种方式:加锁和解锁线程在进入临界区之前,加锁操作线程在退出临界区之后,解锁操作如果锁是加锁状态,则执行加锁操作将会阻塞,这就是互斥锁。锁在解决竞争关系的时候是很方便的。(2)互斥锁的类型:pthread_mutex_t(一原创 2020-05-12 18:12:36 · 254 阅读 · 0 评论 -
【Linux】线程的概念与线程库的创建
一、线程的概念1、线程是进程内部的一条执行序列(执行流),一个进程可以包含多个线程。将main函数执行的线程称之为主线程,其他线程的线程称之为函数线程。一个线程,就是执行流一组有序指令。2、函数调用和线程函数的区别(1)函数调用比如一段代码:int main(){ fun();}它的函数调用栈大概流程是这样的:当把fun函数里面的指令执行完成以后退回到main中继续执行,这就是函数调用的简单过程。详细过程参考博客:(2)线程函数先看一段简单的代码void* fun(void原创 2020-05-09 18:19:40 · 750 阅读 · 0 评论 -
【Linux】进程间通讯之共享内存
共享内存一、共享内存的概念进程的地址空间都是独立的,受保护的。假设我们现在有两个进程:A进程和B进程//Aint a = 10;printf("%d\n",a);//Bint a = 10;printf("%d\n",a);这两个进程中的a是没有关系的。那么共享内存就是内存上开辟的一块区域,能使得ptra和ptrb都指向这个空间,这样ptra可以在这个空间写东西,ptrb去...原创 2020-05-08 11:47:21 · 423 阅读 · 0 评论 -
【Linux】进程间通讯之信号量
**信号量**一、信号量的概念信号量是一个特殊的变量(计数器),其值大于0时,记录临界资源的个数,当值等于0时,对此信号量执行P操作(-1)会阻塞,直到信号量的值大于0,或者有其他进程在此信号量上执行了V操作(+1)通过信号量我们主要完成的是对于进程执行的同步控制二、与信号量有关的相关内容的概念1、临界资源2、临界区3、原子操作4、PV操作三、相关方法去操作信号量因为Lin...原创 2020-05-07 18:05:20 · 303 阅读 · 0 评论 -
【Linux】进程间通讯之消息队列
上一篇博客我们说到进程间通讯之管道的应用,这篇博客我们主要说一下进程间通讯之消息队列。一、消息队列的概念1、消息:类型+数据2、队列:先进先出的特点,也是一种优先级队列二、相关的函数1、int msgget():用来创建或访问一个消息队列它的函数原型是:int msgget((key_t)key, int flag);msgget():成功返回内核对象的ID值,失败返回-1...原创 2020-05-07 13:25:52 · 316 阅读 · 0 评论 -
【Linux】进程间通讯之管道
进程间通信的机制包括:管道、信号量、共享内存、消息队列。这篇博客主要介绍的是进程间通讯之管道的应用一、管道的分类管道都属于半双工通讯机制管道分为有名管道和无名管道1、有名管道在磁盘上有一个管道文件标识,但是这个管道文件只会占据一个inode点,但是这个管道文件任何时候都不会占据block块。数据在传递过程中会缓存到内存上。这就是有名管道。管道文件仅仅是为了使得不同的进程(有权限操作)...原创 2020-05-06 17:56:08 · 378 阅读 · 0 评论 -
【Linux】僵死进程的处理方法
一、利用信号解决僵死进程的问题1、方法之前我们在父进程中直接调用wait方法,会使得父进程阻塞,等待一个子进程结束,如果有多个子进程的话,父进程就会等待这些所有的子进程推出后再退出。为了解决这个问题,我们引入信号。父进程需要调用wait方法,但是子进程在结束时会给父进程发送SIGCHID,当父进程接收到SIGCHID信号时,再调用wait方法,这样父进程就不会阻塞。那么父进程哪些代码能够...原创 2020-05-06 11:46:09 · 552 阅读 · 0 评论 -
【Linux】进程替换的简单实现
一、进程替换的定义像我们一般写的进程都是,创建子进程后,子进程执行的还是父进程的指令。这样是很不方便的。所谓的进程替换就是一个进程能够去执行另一份程序。也就是fork之后,子进程进行进程的替换,父进程继续执行其指令,子进程就可以执行另一份指令。二、进程替换的方法1、int execl();属于库函数int execl(char* pathname,char* argv0,char* ar...原创 2020-05-01 11:15:50 · 280 阅读 · 0 评论 -
【Linux】僵死进程的简单介绍
一、僵死进程的定义一个进程执行结束也就是代码部分执行结束,但是进程的PCB没有被系统释放。进程结束后,在PCB中还要保存进程退出码,以备其父进程获取其退出码。而僵死进程恰恰就是父进程没有获取退出码。也就是父进程未结束,子进程结束,并且父进程没有获取子进程的退出码,这样就形成了僵死进程。二、在系统上体现僵死进程我们在系统上创建这样一个文件,里面写这样的代码#include <stdl...原创 2020-04-30 20:42:20 · 467 阅读 · 0 评论 -
单链表逆置之两种算法的比较
一、第一种算法1、思路定义两个指针P、Q,P指向链表的头结点,Q指向链表的最后面,也就是len的位置。每当P每次向后移动一个位置,Q就回退,也就是len的位置。P每次向后移动两个位置,Q就回退到len-1的位置。当 P移动到len/2的位置就相当于链表中的元素全部都遍历完,接下来将对称点作交换就可以。2、代码实现如下:void Reverse (PList pl){ int l...原创 2020-04-29 12:37:19 · 404 阅读 · 0 评论 -
【Linux】系统调用和库函数的区别
系统调用函数的详细介绍请看上一篇博客。https://blog.youkuaiyun.com/qq_43411563/article/details/105808151这篇博客我们简单来说一下系统调用和库函数的区别一、区别系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间。如下图所示:上图我们可以看到,应用程序可以直接去调用我们的系统调用方法,也可以通过库函数去调用我们的系...原创 2020-04-28 17:33:19 · 594 阅读 · 0 评论 -
【Linux】文件操作系统的调用函数
我们都知道在C语言中文件的函数有:fopen、fwrite、fclose、fseek、fread这几个函数的文件原型以及参数如下所示:FILE *fopen(const char *path,const *mode);size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);size_t fwrite(const void...原创 2020-04-28 16:25:55 · 554 阅读 · 0 评论 -
【Linux】进程的创建---fork
我们去启动一个进程的时候一般的步骤是:路径+程序。这样就可以启动一个进程。但是这个过程是用户执行的。但是这样的速度是比较慢的,所以我们通过一个进程去创建另一个进程这样的一个方式。去使我们的速度变快,这个过程是由程序来执行的。这也就是我们今天这篇博客所说的进程的创建之fork方法。一、fork()方法的原型1、创建一个进程pid_t fork(void);我们先通过一段代码来简单得说一下...原创 2020-04-25 18:37:17 · 387 阅读 · 1 评论 -
【Linux】主函数的参数和输出缓冲区的问题
一、主函数(main函数)的参数1、参数类型当我们在c语言中使用main函数的时候,系统会给我们生成这样一个方法:int main(int argc, char* argv[], char* envp[]);这三个参数的含义(1)argc:int类型。指的是传递给main方法的参数列表中的参数个数(2)argv:指针数组类型(char*) []。传递给main()方法的参数列表。...原创 2020-04-25 13:39:56 · 183 阅读 · 0 评论 -
【Linux】操作系统的组成概述
这篇博客我们只从四个方面简单概括得说操作系统的组成。这四个方面是计算机的基本组成、进程概论、内存管理和操作系统的发展。一、计算机的基本组成说到计算机的基本组成我们必须了解到一个人冯诺依曼。他是第一个提出当代计算机的体系架构,也是计算机之父。将他提出的体系架构称为“冯诺依曼体系”。1、冯诺依曼体系就是将我们的计算机进行了一个划分。分为计算器、控制器、存储器、输入设备和输出设备这五大部件。(...原创 2020-04-23 16:02:40 · 1605 阅读 · 0 评论 -
【Linux】进程和用户管理命令之用户管理命令
我们都知道linux是一个多用户的操作系统,肯定会涉及到多用户的管理。注意:只能是root用户进行管理,其他用户是不能管理的。linux操作系统是通过分组的方式对用户进行管理的。所以这里我们就应该考虑两个方式,一个是用户一个是组。一、用户存储文件我们首先来看一下在系统上是在哪里存储用户信息的。1、/etc/password第一个就是与我们用户相关的/etc/password这个路径。我们...原创 2020-04-21 17:05:12 · 187 阅读 · 0 评论 -
【Linux】进程和用户管理命令之进程管理命令
在说到进程管理命令时,我们都应该对进程有一个认知。那什么是进程呢?一、进程的定义1、定义我们都知道进程管理、内存管理和文件管理是操作系统的三大核心。进程顾名思义就是进展中的程序或者说是执行中的程序。就是说一个进程加载到内存中就会变成进程。2、与程序的区别在知道这些之后,我们还应该了解到一下几个的概念。(1)、源码文件(.c):就是我们用户写的代码(2)、程序:使用编译器将源码文件编译...原创 2020-04-21 15:11:52 · 191 阅读 · 0 评论 -
【Linux】MakeFile文件
一、问题的出现我们在Linux上编译一个main.c文件时通常会用到这个命令:gcc -o main main.c假如我们同时写了多个文件,比如有sel.c、select.c、sub.c等等,我们就会这样来编译这些文件gcc -o main main.c sel.c select.c sub.c但如果其中一个文件出现错误,我们修改了之后就会必须将其他文件里的相关内容也进行修改但如...原创 2020-04-18 15:06:03 · 2524 阅读 · 0 评论 -
【Linux】预编译、编译、汇编、链接过程
当我们拿到一个.cpp的文件,我们看到它的代码,但我们又是知道它是怎样运行的?我们都知道我们所看到的代码都是高级语言。但计算机底层只能识别像0,1这样的低级语言,所以这也是一个将C/C++代码转成汇编语言然后再变成机器语言的过程。具体可分为预编译、编译、汇编、链接四个过程。一、在liunx中这四个阶段的具体命令如下:1、预编译:像stdio.h这样的头文件被翻译器cpp翻译成.i文件gcc...原创 2020-03-14 20:47:49 · 474 阅读 · 0 评论 -
Linux下的gdb的常用调试命令
Linux下有一个强大的调试工具gdb,gdb可以调试C、C++、D、Go、python、pascal、assemble(ANSI 汇编标准)等等编程语言。课件gdb调试工具的强大。在此总结了gdb调试C语言常用的一些命令。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可...原创 2019-05-13 21:50:17 · 411 阅读 · 0 评论