自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 pthread_cond_timedwait()函数过程

解锁是为了其他线程解锁mutex是为了允许其他线程能够获取锁,进入临界区并修改共享资源或条件变量的状态。当前线程进入等待状态:当前调用的线程在解锁后立即进入等待状态,直到条件满足或超时发生。此时,该线程不能继续执行,也无法访问共享资源。重新加锁与继续执行:当条件满足或超时时,会重新锁定mutex,然后线程从等待状态中恢复,继续执行接下来的代码。

2024-08-30 10:16:58 192

原创 设计模式之单例模式

没错,这样是可以的。但是程序会经过多人的接手维护和开发,比如第N个接手程序的时候,并不知道这个类定义的时候只能初始化一个实例,然后又实例化了新的对象, 则可能会造成意想不到的场景。那么这时候就要提到防御性编程,单例模式的实现也是防御性编程的一种方式,让这个类保证只有一个实例化对象,并且如果试图构造多个对象的时候,在程序的编译期报错。题外话,这也是有些人在进行一些稍大规模开发的时候,只会去选择强类型语言,而不会选择弱类型语言的原因,强类型语言会在编译期间帮我们避免很多运行时可能产生的的Bug。

2024-02-27 16:11:20 470

原创 Linux 高并发服务器

epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。主要使用的方法有三种。

2024-02-03 10:51:45 1416

原创 Linux 网络编程

同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。

2024-02-02 11:29:19 926

原创 Linux网络编程 基础

对于IPv4,4位版本字段是4。两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的。双方发送的段按时间顺序编号为1-10,各段中的主要信息在箭头上标出,例如段2的箭头上标着SYN, 8000(0), ACK1001, ,表示该段中的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置1,32位确认序号是1001,带有一个mss(Maximum Segment Size,最大报文长度)选项值为1024。

2024-02-01 10:32:09 1291

原创 Linux 互斥锁、读写锁、条件变量以及信号量

现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。

2024-01-25 14:15:00 878

原创 Linux守护者进程以及线程————全网最详细!!!!!

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。

2024-01-24 12:00:30 1582

原创 Linux 信号

在PCB中有两个非常重要的信号集。一个称之为“阻塞信号集”,另一个称之为“未决信号集”。这两个信号集都是内核使用位图机制来实现的。但操作系统不允许我们直接对其进行位操作。而需自定义另外一个集合,借助信号集操作函数来对PCB中的这两个信号集进行修改。为了方便对多个信号进行处理,一个用户进程常常需要对多个信号做出处理,在 Linux 系统中引入了信号集(信号的集合)。这个信号集有点类似于我们的 QQ 群,一个个的信号相当于 QQ 群里的一个个好友。

2024-01-17 10:30:00 755

原创 Linux 共享存储映射

第一个参数写成NULL第二个参数要映射的文件大小 > 0第三个参数:PROT_READ 、PROT_WRITE第四个参数:MAP_SHARED 或者 MAP_PRIVATE第五个参数:打开的文件对应的文件描述符第六个参数:4k的整数倍,通常为0。

2024-01-16 10:30:00 834

原创 Linux 无名管道以及有名管道

管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,所有的 UNIX 系统都支持这种通信机制。管道有如下特点:半双工,数据在同一时刻只能在一个方向上流动。数据只能从管道的一端写入,从另一端读出。写入管道中的数据遵循先入先出的规则。管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。管道不是普通的文件,不属于某个文件系统,其只存在于内存中。管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。

2024-01-15 16:17:58 957

原创 Linux 父子进程

那大家想过没有,这样的话,父进程做了什么事情,子进程也做什么事情(如上面的例子),是不是不能实现满足我们实现多任务的要求呀,那我们是不是要想个办法区别父子进程呀,这就通过 fork() 的返回值。使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间:包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控制设定、进程优先级、进程组号等。相当于克隆了一个自己。两次返回的区别是:子进程的返回值是 0,而父进程的返回值则是新子进程的进程 ID。

2024-01-13 10:30:00 374

原创 Linux 进程号和相关函数

但是,这个进程组号和 QQ群号是有点区别的,默认的情况下,当前的进程号会当做当前的进程组号。从运行结果,我们可以看出,fork() 之后的打印函数打印了两次,而且打印了两个进程号,这说明,fork() 之后确实创建了一个新的进程,新进程为子进程,原来的进程为父进程。任何进程( 除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。标识进程的一个非负整型数。

2024-01-13 00:00:00 413

原创 Linux 目录相关操作

【代码】Linux 目录相关操作。

2024-01-12 14:30:00 322

原创 Linux 进程的状态

如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程,于是原有的流程就被中断了,这可能使某些设备陷入不可控的状态。处于此状态的进程也会因为接收到信号而提前被唤醒,比如给一个TASK_INTERRUPTIBLE状态的进程发送SIGKILL信号,这个进程将先被唤醒(进入TASK_RUNNABLE状态),然后再响应SIGKILL信号而退出(变为TASK_ZOMBIE状态),并不会从TASK_INTERRUPTIBLE状态直接退出。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。

2024-01-12 12:00:00 361

转载 Linux 文件描述符复制

这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁。对比于 dup(), dup2() 也一样,通过原来的文件描述符复制出一个新的文件描述符,这样的话,原来的文件描述符和新的文件描述符都指向同一个文件,我们操作这两个文件描述符的任何一个,都能操作它所对应的文件。获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)

2024-01-11 18:00:00 344

原创 Linux 文件操作相关函数

【代码】Linux 文件操作相关函数。

2024-01-11 12:00:00 390

原创 Linux 进程相关命令

有些进程不能直接杀死,这时候我们需要加一个参数“-9”,使用9号信号SIGKILL。杀死进程: kill -SIGKILL/(-9) 89899【进程标识号】命令功能: 发送指定的信号到相应进程。:9133 为应用程序所对应的进程号。

2024-01-10 20:47:39 356

原创 Linux 等待子进程退出函数、孤儿以及僵尸进程

在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。但是,如果我们本来就运行着一个程序(进程),我们如何在这个进程内部启动一个外部程序,由内核将这个外部程序读入内存,使其执行起来成为一个进程呢?这里我们通过 exec 函数族实现。

2024-01-10 20:37:05 822

原创 Linux 错误处理函数

errno 是记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。当Linux C api函数发生异常时,一般会将errno全局变量赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。

2024-01-10 09:30:00 355

原创 Linux 系统调用简介和实现

什么是系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。

2024-01-09 15:04:19 372

原创 Linux 常用文件IO函数以及IO阻塞

从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。这样的好处是可以通过非阻塞I/O实现一些需要并发和异步处理的程序,不会因某个I/O操作的长时间阻塞而不能响应其它事件。

2024-01-09 14:48:03 888

原创 Linux Makefile介绍以及简单使用

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

2024-01-09 14:24:05 850

原创 为什么xshell我的“add.h“是红色的,但是在虚拟机VM中 就是正常的黑色????

这种情况下Xshell连接的远程虚拟机VM可以正常编译使用add.h头文件,但是在Xshell端显示红色报错的现象,很有可能是Xshell本身配置的代码编辑环境所导致的。所以在编辑C/C++代码时,它无法像VM上那样正确解析和定位头文件,只能简单的按照文本语法着色。所以简而言之,这很可能属于Xshell自身环境限制导致的误报,可以忽略或通过配置来修正。Xshell作为SSH客户端,它的代码编辑窗口默认并不会配置一个完整的代码编译运行环境。忽略Xshell端的错误标识,这不影响远程VM上的实际编译。

2024-01-09 14:13:54 416 2

原创 Linux GDB调试器

GNU工具集中的调试器是GDB(GNU Debugger),该程序是一个交互式工具,工作在字符模式。除gdb外,linux下比较有名的调试器还有xxgdb, ddd, kgdb, ups。GDB主要帮忙你完成下面四个方面的功能:启动程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事。动态的改变你程序的执行环境。

2024-01-09 14:11:21 802

原创 Linux 静态库和动态库简介以及制作

所谓“程序库”,简单说,就是包含了数据和执行码的文件。其不能单独执行,可以作为其它执行程序的一部分来完成某些功能。库的存在可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便于升级。程序库可分静态库(static library)和共享库(shared library)。

2024-01-09 14:05:30 779

原创 Linux静态链接以及动态链接

前面我们编写的应用程序大量用到了标准库函数,系统默认采用动态链接的方式进行编译程序,若想采用静态编译,加入-static参数。动态链接:连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序。总的来说,静态库可以产出独立程序,动态库实现了模块化和代码共享,以空间换时间。链接器会根据是静态链接还是动态链接,调用不同的处理逻辑,最终产出可执行程序。静态链接:由链接器在链接时将库的内容加入到可执行程序中。所以同样的代码,静态链接和动态链接链接后的结果并不相同。

2024-01-09 13:55:10 404

原创 Linux-GCC编译器

编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。

2024-01-09 13:51:11 394

原创 Linux 宏的定义以及使用

所以总体上来说,这段代码编译了2test.c这个源文件,同时定义了SIZE宏,然后运行生成的a.out程序,程序打印出了SIZE宏的值10。综上,宏之所以叫“宏”,是因为它实现了一种源代码的宏观化编辑和批量替换的效果。所以宏给人一种是在源代码层面上“批量编辑”的感觉。这就像从宏观上改变了源代码,相当于一个“Find and Replace”的过程。宏(Macro)之所以被称为“宏”,是因为它可以看成是源代码的一种“宏观替换”。通过定义宏的方式,可以在编译时配置程序的一些参数,而不需要修改源代码。

2023-12-31 16:52:53 502 1

原创 Linux vim使用方法

此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。常见的Linux配置文件包括:/etc/目录下各服务的配置文件,bash的.bashrc,vim的.vimrc,用户家目录下各程序的隐藏配置文件等。Vim 的全名是 Vi IMproved,意为“增强版的 Vi”,它是在 Vi 的基础上进行改进和增强得到的。如果通过vi打开一个已经存在的文件,首先进入命令模式,此时输入的任何字符都被视为命令,不能输入内容。配置文件可以包含用户专属的设置。

2023-12-29 23:18:36 877

原创 Linux创建文本编辑器时遇到的一个小问题

gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。gedit是一个自由软件。这是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。gedit是一个Linux环境下的文本编辑器,类似windows下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适。

2023-12-25 21:52:43 360

原创 Linux重定向

标准错误(stderr)是命令/程序输出错误信息的数据流,默认也是输出到屏幕,文件描述符为2。这将命令的标准输入重定向自 input_file,标准输出重定向到 output_file。标准输出(stdout)是命令/程序输出正常结果的数据流,默认输出到屏幕,文件描述符为1。标准输入(stdin)是命令/程序接受输入的数据流,默认从键盘输入,文件描述符为0。这将命令的标准输出以追加的方式重定向到 file 文件中,文件不存在则新建。这将命令的标准输出重定向到 file 文件中,文件会被覆盖或新建。

2023-12-25 20:52:08 405

原创 Linux软硬链接的区别

所以简单来说,硬链接就是物理上的多个文件名指向同一个文件;软链接类似 Windows 的快捷方式,通过存放源文件路径来定位源文件。

2023-12-25 20:48:17 776

原创 Linux目录内容查看以及“快捷方式”创建

如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。注意:如果软链接文件和源文件不在同一个目录,源文件最好要使用绝对路径,不要使用相对路径。ln命令主要用于创建链接文件。Linux链接文件类似于Windows下的快捷方式。ln 源文件 链接文件 ln -s 源文件 链接文件。

2023-12-24 11:50:45 408

原创 Linux进程管理

信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。kill 9133 :9133 为应用程序所对应的进程号。

2023-12-24 11:40:22 348

原创 Linux文件权限管理概述及其示例

Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。对目录来说,具有删除、移动目录内文件的权限。

2023-12-21 22:45:23 823

原创 Linux压缩包管理

计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。l tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。| 通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。压缩用法:tar cvzf 压缩包包名 文件1 文件2 …l 解压文件:unzip -d 解压后目录文件 压缩文件。l tar与gzip命令结合使用实现文件打包、压缩。

2023-12-21 22:05:59 791

原创 Linux管道的使用

Ubuntu系统中可以使用管道操作符"|"来将一个程序的输出作为另一个程序的输入,实现多个命令之间的数据流转,非常常用和方便。利用管道,可以将多个命令强大的功能组合起来使用,灵活方便。要充分发挥Unix/Linux系统的威力,管道的使用是必备的。这会将command1的标准输出连接到command2的标准输入。通过管道以及文本搜索命令,我们筛选得到了只包含"inet"的信息。

2023-12-21 19:38:19 361

原创 Linux文本搜索命令-grep

Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。在grep命令中输入字符串参数时,最好引号或双引号括起来。例如:grep ‘a ’1.txt。查找 /home/itcast 下包含“hello,world“字符串的文件。命令:grep -r + “查找的关键字” + 路径。搜索目录需要添加参数: -r。

2023-12-21 16:55:05 317

原创 MySQL内连接隐式显式有啥区别啊????

【代码】MySQL内连接隐式显式有啥区别啊????

2023-12-21 14:52:12 1706 2

原创 MySQL-内连接、外连接、自连接以及联合查询的一个示例

【代码】MySQL-内连接、外连接、自连接以及联合查询的一个示例。

2023-12-21 11:42:04 354

格兰杰因果关系效应GCCA因果分析工具(Matlab)和说明书

格兰杰因果关系检验(英语:Granger causality test)是一种假设检验的统计方法,检验一组时间序列x是否为另一组时间序列y的原因。它的基础是回归分析当中的自回归模型。回归分析通常只能得出不同 变量间的同期 相关性;自回归模型只能得出同一 变量前后期 的相关性;但诺贝尔经济学奖得主克莱夫·格兰杰(Clive Granger)于1969年论证 ,在自回归模型中透过一系列的检验进而揭示不同变量之间的时间落差相关性是可行的。 格兰杰本人在其2003年获奖演说中强调了其引用的局限性,以及“很多荒谬论文的出现”(Of course, many ridiculous papers appeared)。格兰杰因果关系检验的结论只是一种统计估计,不是真正意义上的因果关系,不能作为肯定或否定因果关系的根据。同时,格兰杰因果关系检验也有一些不足之处,如并未考虑干扰因素的影响,也未考虑时间序列间非线性的相互关系。一些基于格兰杰因果关系检验的方法一定程度上解决了这些问题。

2023-12-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除