- 博客(209)
- 资源 (15)
- 收藏
- 关注
原创 Linux资源管理
Linux目录介绍Linux命令解析器-Bash解析器常用快捷键内建命令和外部命令帮助文档目录相关的命令文件类型文件相关命令文件内容查看命令查找相关命令文件权限管理使用chmod 命令修改文件权限chown 命令用于修改文件所有者以及文件所属组压缩命令gzip压缩命令bzip2压缩命令zip和unzipkill命令进程管理重定向软件安装和卸载其它命令ln符号链接命令
2025-08-19 17:33:00
715
原创 STL资源整理
初识STLstring容器vector容器deque容器stack容器queue容器list容器set容器map容器拷贝算法和替换算法排序算法查找算法遍历算法函数对象(仿函数)
2025-08-10 09:58:38
315
原创 OCCI使用
OCCI(Oracle C++调用接口)是Oracle提供的C++ API,支持通过面向对象方式访问Oracle数据库。它具有基于标准C++、易用性、类似JDBC等特点,支持SQL/PLSQL、自定义类型和Oracle所有数据类型。使用前需配置头文件和库文件(如oraocci11.lib)。通过Environment类初始化,Connection类连接数据库,Statement类执行SQL语句,ResultSet处理查询结果。示例代码展示了连接数据库、执行增删改查操作的基本流程,最后需释放资源。OCCI为C
2025-09-18 11:18:05
1064
原创 Linux-共享内存
shmat 将当前进程和共享内存关联到一起shmdt将共享内存和当前进程分离shmctl 删除共享内存当共享内存被执行了删除操作之后, key值会发生变化, 变为 0key值变为0之前, 可以和任意进程关联==0之后, 无法和其他进程进行关联操作共享内存被删除的时候, 会判断其内部的引用计数(进程和共享内存关联的数量)如果引用计数==0, 共享内存会被马上删除引用计数>0, key值被修改为0, 其他进程无法与其进行关联, 当引用计数减为0的时候, 共享内存被删除sh
2025-09-17 17:45:43
587
原创 高并发服务器-多路IO转接-select
多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。
2025-09-11 21:11:53
476
原创 Socket编程
Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。
2025-09-10 21:06:07
510
原创 TCP状态转换
server终止时,socket描述符会自动关闭并发FIN段给client,client收到FIN后处于CLOSE_WAIT状态,但是client并没有终止,也没有关闭socket描述符,因此不会发FIN给server,因此server的TCP连接处于FIN_WAIT2状态。FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。
2025-09-10 15:42:54
1061
原创 TCP三次握手与四次挥手
从这个例子还可以看出,发送端是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据。发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。
2025-09-10 15:34:31
252
原创 Linux-网络基础
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
2025-09-10 10:04:04
667
原创 Linux-信号量
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。信号量主要用于进程或线程间的同步和互斥这两种典型情况。信号量数据类型为:sem_t。
2025-09-08 20:24:09
299
原创 Linux-条件变量
与互斥锁不同,条件变量是用来等待而不是用来上锁的,条件变量本身不是锁!条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件不满, 阻塞线程当条件满足, 通知阻塞的线程开始工作条件变量的类型: pthread_cond_t。
2025-09-08 17:11:31
480
原创 Linux-读写锁
当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。在对数据的读写操作中,更多的是读操作,写操作较少,例如对数据库数据的读写应用。为了满足当前能够允许多个读出,但只允许一个写入的需求,线程提供了读写锁来实现。
2025-09-08 15:49:03
332
原创 Linux-死锁(DeadLock)
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
2025-09-08 10:58:39
571
原创 Linux-互斥锁Mutex
在线程里也有这么一把锁:互斥锁(mutex),也叫互斥量,互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即加锁( lock )和解锁( unlock )。互斥锁的操作流程如下:1)在访问共享资源后临界区域前,对互斥锁进行加锁。2)在访问完成后释放互斥锁导上的锁。3)对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。互斥锁的数据类型是: pthread_mutex_t。
2025-09-08 10:04:46
711
原创 Linux-同步与互斥
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。**互斥:**不同任务之间的若干程序片段,当某个任务运行其中一个片段时,其他任务就不能运行他们之间的任意程序片段,只能等到该任务运行完这个程序片段后才可以运行。最基本的场景就是:一个公共资源在同一时刻只能被一个进程或线程使用。
2025-09-08 09:51:08
439
原创 Linux-线程属性
Linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。//线程的分离状态//线程调度策略//线程的调度参数//线程的继承性//线程的作用域//线程栈末尾的警戒缓冲区大小//线程的栈设置//线程栈的位置//线程栈的大小主要结构体成员:线程分离状态。
2025-09-04 10:40:30
588
原创 LInux-线程常用操作函数
在一个线程中调用pthread_create()创建新的线程后,当前线程从pthread_create()返回继续往下执行,而新的线程所执行的代码由我们传给pthread_create的函数指针start_routine决定。如果thread线程被别的线程调用pthread_cancel异常终止掉,retval所指向的单元里存放的是常数PTHREAD_CANCELED。如果thread线程是自己调用pthread_exit终止的,retval所指向的单元存放的是传给pthread_exit的参数。
2025-09-04 10:24:49
778
原创 Linux-线程
线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。
2025-09-04 10:06:22
603
原创 Linux-守护进程
守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。
2025-09-03 14:28:03
369
原创 Linux-会话
功能:获取进程所属的会话ID参数:pid:进程号,pid为0表示查看当前进程session ID返回值:成功:返回调用进程的会话ID失败:-1组长进程不能成为新会话首进程,新会话首进程必定会成为组长进程。功能:创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID。调用了setsid函数的进程,既是新的会长,也是新的组长。参数:无返回值:成功:返回调用进程的会话ID失败:-1。
2025-09-03 13:55:41
186
原创 Linux-进程组
进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID为第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID为其进程ID可以使用kill -SIGKILL -进程组IDps -ajx组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。
2025-09-03 13:47:53
560
原创 Linux-终端
在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。
2025-09-03 13:45:10
193
原创 Linux-IPC-存储映射
存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式, 因为进程可以直接读写内存,而不需要任何数据的拷贝。
2025-08-31 21:15:17
909
原创 Linux-IPC-有名管道
管道,由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了命名管道(FIFO),也叫有名管道、FIFO文件。命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信,因此,通过 FIFO 不相关的进程也能交换数据。
2025-08-31 15:11:59
603
原创 Linux-IPC-无名管道
管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,所有的 UNIX 系统都支持这种通信机制。半双工,数据在同一时刻只能在一个方向上流动。数据只能从管道的一端写入,从另一端读出。写入管道中的数据遵循先入先出的规则。管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。管道不是普通的文件,不属于某个文件系统,其只存在于内存中。管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。
2025-08-30 18:26:37
630
原创 进程间通讯概念
但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Processes Communication )。进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。
2025-08-30 12:15:06
321
原创 Linux-进程替换exec
在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。但是,如果我们本来就运行着一个程序(进程),我们如何在这个进程内部启动一个外部程序,由内核将这个外部程序读入内存,使其执行起来成为一个进程呢?这里我们通过 exec 函数族实现。
2025-08-27 12:12:53
520
原创 Linux-孤儿进程和僵死进程
父进程运行结束,子进程还在运行,此时,子进程就成了孤儿进程(Orphan Process)每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init 进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。46789 //孤儿进程1012 {1417 {20 }22 {
2025-08-26 23:17:33
565
原创 Linux-进程相关函数
但是,这个进程组号和 QQ 群号是有点区别的,默认的情况下,当前的进程号会当做当前的进程组号。使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间:包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控制设定、进程优先级、进程组号等。任何进程( 除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,对应的进程号称为父进程号(PPID)。如,A 进程创建了 B 进程,A 的进程号就是 B 进程的父进程号。
2025-08-25 18:57:58
778
原创 Linux-进程的状态
如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程,于是原有的流程就被中断了,这可能使某些设备陷入不可控的状态。为了父进程能够获知它的消息,子进程的进程描述符仍然被保留着。当进程接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候。信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。kill命令指定进程号的进程,需要配合 ps 使用。,进程分为新建态、终止态,运行态,就绪态,阻塞态。
2025-08-25 13:13:47
642
原创 Linux-文件描述符复制以及设置文件状态
dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁。
2025-08-24 14:47:16
350
原创 Linux-常用文件IO函数
从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。umask mode:设置掩码,mode为八进制数。
2025-08-23 23:22:33
908
原创 Linux-Makefile
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE。
2025-08-22 18:19:00
1104
原创 Linux-GDB调试器
GNU工具集中的调试器是GDB(GNU Debugger),该程序是一个交互式工具,工作在字符模式。除gdb外,linux下比较有名的调试器还有xxgdb, ddd, kgdb, ups。启动程序,可以按照你的自定义的要求随心所欲的运行程序。可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事。动态的改变你程序的执行环境。
2025-08-21 18:49:41
980
原创 Linux动态库制作和使用
动态库(共享库)在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。wuyou@itcast:~/test/6share_test$ gcc test.c -L. -I. -ltest (-I. 大写i -ltest 小写L)动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。所以最终的动态库的名字应该为:libxxx.so。然后运行:./a.out,发现竟然报错了!
2025-08-21 13:54:51
389
SocketTool4.zip
2025-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅