Linux
文章平均质量分 81
文丑颜不良啊
平平无奇的Java开发小白
展开
-
Linux下线程
什么是线程在一个程序中的多个执行路线就叫做线程(thread)。更准确的定义是:线程是一个进程内部的一个控制序列。线程的优点和缺点在某些环境下,创建新线程要比创建新进程有更明显的优势。新线程的创建代价要比新进程小得多。线程的优点如下:(1)线程间的数据共享比进程间容易得多。有时,让程序看起来好像是在同时做两件事情是很有用的。一个经典的例子是,在编辑文档的同时对文档中的单词个数进行实...原创 2019-12-12 15:10:02 · 115 阅读 · 0 评论 -
孤儿进程、僵尸进程、守护进程
进程的各种状态运行状态(R:runing):运行状态的进程并不意味着此时的进程一定在运行,它表明进程要么在运行,要么在运行队列里。睡眠状态(S:sleeping):进程在等待着事件完成。磁盘休眠状态(D:disk sleep):也称不可中断睡眠状态,这个状态的进程通常会等待I/O的结束。停止状态(T:stopped):可以通过发送SIGSTOP信号给进程来终止停止状态的进程。这个被...原创 2019-10-24 16:52:02 · 236 阅读 · 0 评论 -
Linux虚拟地址空间
为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏,采用了虚拟内存。虚拟内存技术使得不同进程在运行过程中,它所看得到的是自己独自占有了当前系统的4G内存。所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。事实上,在每个进程创建加载时,内核只是为进程创建了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位...原创 2019-10-24 13:20:47 · 165 阅读 · 0 评论 -
进程间通信之共享内存
进程间通信之共享内存 共享内存就是不同进程之间共享的一块内存区域。一般情况下,每个进程都有自己独立的内存空间,一个进程不能直接访问其他进程的内存区域,这样就使得进程与进程之间不能交流,而共享内存的出现,则使进程之间的相互访问变成了现实。 共享内存是通过多个进程之间对内存段进行映射的方法来实现内存共享的,这是进程间通信的最快的一种方式,因为此方式没有中间过程,...原创 2019-08-16 19:00:23 · 1610 阅读 · 0 评论 -
进程与线程的区别和联系
进程与线程原创 2019-08-15 17:52:58 · 744 阅读 · 0 评论 -
进程间通信方式
概念 所谓进程间通信,指的是不同进程之间传播和交换信息,主体是进程,且是大于等于2个进程;工作是通信,即进行数据的交换。进程间通信的目的 数据传输:一个进程将它的数据发送给另一个进程。 资源共享:多个进程之间共享相同的资源,此时需要内核提供互斥和同步机制。 进程控制:有些进程希望完全控制另一个进程的执行,此时控制进...原创 2019-08-14 16:56:07 · 308 阅读 · 0 评论 -
进程间通信之信号
概念:信号(signal)是一种软件中断,是UNIX系统中最为古老的进程之间的通信机制。用于在一个或多个进程之间传递异步信号。它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。在Linux中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据。作用:用于进程之间的通信;通知进程发生了异步事件来源:信号可以由各种异步事件产生,如键盘...原创 2019-08-08 16:36:07 · 1374 阅读 · 0 评论 -
IO复用之poll
poll()函数 poll在本质上和select没有什么区别,它将用户传入的数组复制到内核空间,然后查询每个描述符对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有描述符后发现没有设备就绪,则挂起当前进程,直到设备就绪或者等待超时,被唤醒后它又要再次遍历描述符。 poll()函数用来等待某个文件描述符上的某个时间的发生,其原型为...原创 2019-07-26 23:12:03 · 501 阅读 · 0 评论 -
文件系统简介
文件系统狭义的概念是一种对存储设备上的数据进行组织和控制的机制存储文件时系统将磁盘分成若干个块(Block),每个Block的大小已经由系统指定,一般是4096字节,即8个扇区。也就是说将8个扇区作为一个单位进行管理。为了管理方便,称磁盘的第一个Block为Boot Block,即启动块,用来记录当前磁盘分了几个区,还记录了每个区的起始位置以及每个区上的操作系统,此Block的大小为1024字...原创 2019-04-18 23:00:25 · 720 阅读 · 0 评论 -
动态库的创建与调用
动态库的创建:先创建一个目录用来后续操作:然后在Dynamic目录下编辑两个文件,calculate.h和calculate.c,此两个文件和静态库用到的文件一样:编译:命令:gcc 源文件 -fPIC –shared –o 目标文件源文件只.c文件,当工程文件数目较少(只有一个)时,便可直接编译目标文件指最终生成的动态库文件,一般后缀为.so当工程文件数...原创 2019-04-16 00:43:45 · 3762 阅读 · 0 评论 -
静态库的创建与调用
静态库的创建:静态库后缀通常以.a结尾,链接生成静态库时需要使用ar命令。常用参数:r 在库中插入(修改)模块(替换静态库)。当插入的模块名已经在库中存在, 则替换同名的模块,如若干模块中有一个模块在库中不存在,则ar显示一个 错误信息,并且不会替换其他同名模块c...原创 2019-04-15 18:04:27 · 5388 阅读 · 0 评论 -
Makefile的编译方式
Makefile使用GCC的命令进行程序编译时,当程序是单个文件时编译是比较方便的,但当工程中的文件数目增多,甚至非常庞大,并且目录结构关系复杂时,便需要通过makefile来进行程序的编译。示例:目录MakeFile_Demo下有三个文件来合作进行加减乘除的计算使用Makefile编译:Makefile中代码格式:目标对象:依赖对象...原创 2019-04-13 17:16:45 · 24905 阅读 · 0 评论 -
GDB调试
GDB(GNU Debugger)是GCC的调试工具。其常用功能为:(1)启动你的程序,并可以按照你的自定义的要求随心所欲的运行程序;(2)可以让被调试的程序在你所指定的断点处停住;(3)当程序被停住时,可以检查此时你的程序中所发生的事;(4)动态的改变你的程序的执行环境。启动gdb:使用命令gdb 程序名即可启动gdb调试,首先需使用gcc –g 源文件 –o 目标文件...原创 2019-04-13 15:10:13 · 148 阅读 · 0 评论 -
gcc的常用选项与编译
gcc是Linux系统中著名的编译器,主要用于编译Linux下的C语言程序。由于gcc支持多种语言,因此gcc能够支持多种文件后缀的编译。 后缀名 意义 .c C语言源文件 .C/.cpp/.cc/.cxx C++源文件 .h 头文...原创 2019-04-13 12:04:30 · 945 阅读 · 0 评论 -
关于vi
vi是Linux系统中一款编辑软件,也是Linux系统中第一款全屏幕编辑软件。vi的启动命令:vi test.txt该编辑器的启动方式很简单,只需在终端窗口中输入命令即可。该命令就会进入vi编辑器中编辑一个名叫test.txt的文件。如果该文件已存在,输入该命令则vi会将该文件的整个内容读取到已准备进行编辑的缓冲区当中,若该文件不存在,则vi将打开一个新的缓冲区域来进行编辑。vi...原创 2019-04-11 21:39:28 · 849 阅读 · 0 评论 -
Linux的简单命令
主目录即用户登录目录(用户登陆的时候默认的目录就是主目录)1.pwd命令:用来显示当前工作目录的路径示例:用pwd命令获取主目录的路径2.cd命令:用来切换工作目录cd 切换到主目录cd ~...原创 2019-03-23 18:49:37 · 144 阅读 · 0 评论 -
关于Shell
Shell编程和java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就行了,所以,通常用shell来写脚本。Linux下的shell种类众多,我们通常所说的shell是Linux系统下默认的Bush Shell,也就是Bourne Shell(/usr/bin/sh或/bin/sh)。创建shell脚本shell脚本的创建和其他文件创建方式相同,使用vi/...原创 2019-10-06 20:11:55 · 293 阅读 · 0 评论 -
Linux下访问数据库
Linux下访问数据库 声明:本文只简单描述Linux系统下访问mysql数据库的步骤,关于连接上数据库之后的简单的对于数据库的增删改查等操作只是稍微提及,关于增删改查的语句书写,本文不再讲述。 一般来说,访问数据库有如下几个步骤: 1.初始化mysql环境 2.连接数据库 3.执行sql语句...原创 2019-08-02 22:40:33 · 20688 阅读 · 0 评论 -
TCP网络编程基础
TCP协议由于其传输的稳定性,在很多程序中都在使用。本文主要记录TCP网络编程的基础知识,包括其编程过程中使用的套接字的基础知识和其编程的流程。套接字基础 既然要进行TCP下的网络编程,那么其中肯定就会涉及到网络地址的使用,那么就不可避免的会使用到套接字定义的地址结构。套接字地址结构 套接字编程需要指定套接字的地址作为参数,不同的协议族...原创 2019-08-02 22:01:40 · 408 阅读 · 0 评论 -
文件操作之相关练习
示例1:向test.txt文件中写入数据test.txt(假设已存在的test.txt的文件内容为123456789)file1.c#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h&g...原创 2019-04-27 17:26:50 · 319 阅读 · 0 评论 -
进程
进程的定义:在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可能再现性的特征。由此,决定了通常的程序是不能参与并发执行的,否则,程序的运行也就失去了意义。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,“进程”便登上了舞台。为了使参与并发执行的每个程序,包含数据都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制...原创 2019-04-29 20:56:42 · 406 阅读 · 0 评论 -
PCB的作用及其包含的信息
为了使参与并发执行的每个程序,包含数据都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(PCB,Process Control Block)。进程与PCB是一一对应的,用户进程不能修改。进程控制块PCB的作用:为了便于系统描述和管理进程的运行,在OS的核心为每个进程专门定义了一个数据结构——进程控制块PCB(Process Control Block)。PCB作为进程...原创 2019-04-29 22:00:05 · 20087 阅读 · 2 评论 -
ipcs命令与ipcrm命令
ipcs命令:提供IPC设备的信息命令格式:ipcs [resource-option] [output-format]ipcs [resource-option] –i idresource-option选项:ipcs –m 查看系统共享内存的信息ipcs –q 查看系统消息队列的信息ipcs –s 查看系统信号量的信息ipcs –[a] 系统默认输出信息...原创 2019-05-26 20:54:10 · 335 阅读 · 0 评论 -
进程间通信
进程间通信是指不同进程之间传播和交换信息,主体是进程,且是大于等于2个进程,工作是通信,进行数据的交换与传播。在Linux下的多个进程间的通信机制叫做IPC(Interprocess Communication),它是多个进程之间进行相互沟通的一种方法。在Linux下有多种进程间通信的方法:半双工管道、FIFO(命名管道),消息队列、信号量、共享内存等。使用这些通信机制可以为Linux下的网络服...原创 2019-05-18 11:21:48 · 433 阅读 · 0 评论 -
进程与task_struct
进程的定义:从用户的角度来解读,进程是一个正在执行的程序,是程序的一个实例,它包括可执行程序以及与其相关的系统资源,比如打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间及包含全局变量的数据段等。如果从内核的角度看的话:进程是分配系统资源的基本单位,进程的目的是担当分配系统资源(CPU时间,内存等)的实体。从操作系统角度: 进程是一个术语,在UNIX、Linux和其他一些操作系统...原创 2019-05-27 22:35:18 · 217 阅读 · 0 评论 -
进程间通信之消息队列
消息队列是内核地址空间中的内部链表,通过Linux内核在各个进程之间传递内容,消息顺序地发送到消息队列中,并且以几种不同的方式从队列中获取,每个消息队列可以用IPC标识符唯一的进行标识,内核中的消息队列是通过IPC的标识符来区别的,不同的消息队列之间是相互独立的,每个消息队列中的消息又构成一个独立的链表。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型...原创 2019-05-23 20:40:12 · 1272 阅读 · 0 评论 -
Linux命令之df
df即“可用磁盘”(disk free),用于显示文件系统的磁盘使用情况。默认情况下df命令将以每块1k的单位进行显示所有当前已经挂载的文件系统。 Linux下df命令的基本格式为: df {options} {mount_point_of_filesystem} 其中,options的可用选项有:在终端直接...原创 2019-06-06 00:53:00 · 1835 阅读 · 0 评论 -
字节序转换函数与地址转换函数
字节序转换函数需要包含头文件#include <arpa/inet.h>1.htons():把unsigned short类型从主机序转换到网络序(h:host,主机;n:net,网络;s:unsigned short,16位短整数)2.htonl():把unsigned long类型从主机序转换到网络序(l:unsigned long,32位长整数)3.ntohs():把u...原创 2019-06-01 12:30:26 · 1472 阅读 · 0 评论 -
Linux文件
在Linux中,一切皆文件。通常使用ls命令来查看文件类型。如查看家目录下的文件类型:ls –l 又如,查看家目录下UFE目录下的各文件类型,可直接在家目录中使用ls命令查看,只不过需加上路径,即ls –l ./UFE如上图所示,查看文件类型的显示结果格式为:drwxrwxr-x其中,第1个字母代表文件类型。如上图所示,d代表目录文件第2~4个字母代...原创 2019-06-08 14:29:45 · 146 阅读 · 0 评论 -
Linux命令之find
Linux下find命令通常用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为预查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。 参数:find命令使用时通常有俩参数,即path和expression。如果path取空,则默认为在当前路径下查找,如果expressi...原创 2019-06-09 00:35:21 · 350 阅读 · 0 评论 -
Linux命令之netstat
netstat命令netstat命令用于查看网络连接、路由表、网络接口统计数据、虚拟连接等信息。1.查看某个端口号是否被占用netstat –a | grep 端口号-a参数用来列出所有监听和非监听状态的连接例:netatat –a | grep 6379,查看端口号为6379的端口的使用情况。通常来说,当报错显示“Address already in use”时,很可能就...原创 2019-07-08 09:57:29 · 876 阅读 · 0 评论 -
Linux命令之grep
Linux命令之grep grep(global search regular expression and print out the line,全面搜索正则表达式并把行打印)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来。与之相应的还有egrep和fgrep命令。 grep的工作方式:在一个或多个文本中搜索字符串模板,如果模...原创 2019-07-08 21:33:31 · 302 阅读 · 0 评论 -
五种IO模型
五种I/O模型 Linux下基本的I/O模型有5种:阻塞IO模型、非阻塞IO模型、IO复用、信号驱动、异步IO。1.阻塞IO(Blocking IO)模型:在这个模型中,应用程序为了执行read()操作,会调用相应的一个系统调用函数,将控制权交给内核,然后就进行等待,即阻塞。内核开始执行这个系统调用函数,执行完毕后回想应用程序返回响应,应用程序得到响应后就不再阻塞,并进行后...原创 2019-07-28 23:06:32 · 158 阅读 · 0 评论 -
对同步、异步、阻塞、非阻塞的简单理解
同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,也就是必须一件一件事做,等前一件事做完了才能做下一件事。例如普通的B/S模式:提交请求→等待服务器处理→处理完毕返回,这个过程中,客户端浏览器不能干任何事。通俗来讲就是,我调用一个功能,该功能没有结束前,我死等结果。 异步:当一个功能调用后,调用者不能立即得到结果。实际处理这个调用的部件...原创 2019-07-28 23:08:18 · 200 阅读 · 0 评论 -
IO复用之select
select()函数和pselect()函数都用于用于IO复用,它们监视多个文件描述符的集合,判断是否有符合条件的事件发生。 select()函数与recv()函数和send()函数不同的是,recv()函数和send()函数可直接操作文件的描述符。但是使用select()函数时,需要先对所要操作的文件描述符进行查询,查看目标文件的描述符是否可以进行读、写、或...原创 2019-07-23 23:10:12 · 2023 阅读 · 0 评论 -
IO复用之epoll
IO复用之epoll() epoll是select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符个数的限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核中的一个时间表中,这样在用户空间和内核空间的复制就只需要一次。epoll的优点: 1.支持一个进程打开大数目的socket描述...原创 2019-07-29 17:00:46 · 135 阅读 · 0 评论 -
文件系统之基本函数操作
在linux下用文件描述符来表示设备文件和普通文件。文件描述符是一个整型的数据,所有对文件的操作都得通过文件描述符来实现。文件描述符是文件系统中连接用户空间和内核空间的枢纽。当打开或创建一个文件时,内核空间创建相应的结构,并生成一个整型的变量传递给用户空间的对应进程。进程用这个文件描述符来对文件进行操作。用户空间对文件进行操作时,比如读、写一个文件时,将文件描述符作为参数传递给read或write...原创 2019-04-22 20:41:55 · 1543 阅读 · 0 评论