Linux
文章平均质量分 83
L_XRUI
one day one day one day......
展开
-
Linux目录文件权限与ACM时间
Linux系统下目录权限与目录下创建文件的权限分析:1.探究进入一个目录user需要什么权限:首先建立一个目录如下:可知dir目录user拥有者权限为:rwx(可读可写可执行);现在要进入这个目录:在rwx权限下可以进入dir目录此时去除r权限:在-wx权限可以进入dir目录此时去除w权限:在--x权限可以进入dir目录;此时原创 2017-03-20 17:35:03 · 1023 阅读 · 0 评论 -
Linux下信号--阻塞信号
这篇博客http://blog.csdn.net/l_xrui/article/details/72885978讲了信号的基本概念与产生方式。了解以下三种概念:信号递达(Delivery):实际执行信号的处理动作(三种);信号未决(Pending):信号从产生到递达之间的状态;信号阻塞(Block):进程可以选择阻塞某个信号,被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号原创 2017-06-07 00:00:26 · 1327 阅读 · 0 评论 -
线程同步与互斥
互斥:多线程环境下,当所有线程同时访问共享数据时,可能产生冲突,需要使在任一时刻有且只有一个线程访问其共享数据,保证其原子性。线程中实现互斥可运用互斥锁(mutex)来实现,其可相当于进程之间的二元信号量:函数如下:#include //定义初始化一把互斥锁pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //全局、静态用宏初始化原创 2017-06-07 14:57:37 · 964 阅读 · 0 评论 -
消费者生产者模型
消费者生产者模型:某个模块负责产生数据,这些数据由另一个模块来负责处理,产生数据的模块,形象地称为生产者,而处理数据的模块,就称为消费者,该模式还需有一个缓冲区处于生产者和消费者之间,作为一个中介,生产者把数据放入缓冲区,而消费者从缓冲区取出数据。如图:生产者消费者模型可分为:1.三种关系: 生产者与生产者(互斥) 消费者与消费者(互斥) 生产者与消费者原创 2017-06-08 14:47:05 · 1044 阅读 · 0 评论 -
死锁及避免死锁的银行家算法
Linux下:互斥锁是保护临界资源被线程间(或进程间)互斥的访问临界资源,当一个线程得到锁不释放时另一个线程申请时必须等待,由此可以得到概念:死锁:(两种情况)(1)同一个线程先后两次调用lock,在第二次调用时,由于锁已经被自己占用,该线程会挂起等待自己释放锁,由于该线程已被挂起而没有机会释放锁,因此 它将一直处于挂起等待状态,变为死锁;(2)线程A获得了锁1,线程B获得了锁2,原创 2017-06-08 23:53:03 · 14203 阅读 · 4 评论 -
信号的捕捉
信号的捕捉在Linux下机制:如图由此可知此机制下发生了四次的模式切换:用户态--->内核态、内核态--->用户态、用户态--->内核态、内核态--->用户态,从中也可以看出进程处理信号的时机是从内核态切回到用户态时候,若这时有信号可以递达则去执行其自定义处理动作,具体执行完成以后则在返回到用户态main函数继续上下文执行,若处理动作为退出则就直接退出。注意:自定义捕捉函数和mai原创 2017-06-09 17:00:33 · 826 阅读 · 0 评论 -
可重入函数与线程安全
重入:当不同的控制流程调用同一个函数时,有可能当一个调用还没返回时,另一个调用就进入了该函数,将其称作重入;不可重入函数:当一个函数由于可重入出错,则将此函数称为不可重入函数;可重入函数:当一个函数由于可重入而不影响正确结果(其只访问自己的局部变量和参数),将此函数称作可重入函数;举例:常见情况中,当程序正在执行到某一个函数中的某一条指令时,这时其收到了一个信号,于是其暂停执行去处理信原创 2017-06-09 18:59:30 · 840 阅读 · 0 评论 -
子进程的异步等待方式
SIGCHLD:子进程在终止退出时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略。验证如下:创建一个子进程,自定义信号SIGCHLD的捕捉函数,若子进程退出并调用了此信号捕捉函数,则验证成功。#include #include #include #include #include void myhander(int sig){ printf("father ge原创 2017-06-11 15:09:24 · 708 阅读 · 0 评论 -
shell命令代换与eval命令
命令代换:在shell中用以下两种方式实现命令代换:`COMMAND` //反引号$(COMMAND) //$()命令代换即首先执行反引号或括号里的命令,将其结果立刻代换到当前命令行中或者代换赋予一个变量: 如下图,在一个shell脚本中打印日期: 以上执行过程中:第一种先执行反引号与()中date命令,执行完成,结果代换到命令行中然后用echo命令输出;第二种先执行了$()中的dat原创 2017-07-15 17:10:23 · 769 阅读 · 0 评论 -
epoll服务器
相比select、poll,epoll是I/O多路转接最高效的手段,它几乎具备了之前select、poll的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll实现只有epoll_create()、epoll_ctl()、epoll_wait()三个系统调用函数。1、epoll_create()函数:int epoll_create(int size);含义:创建一个e原创 2017-08-17 17:03:25 · 1005 阅读 · 1 评论 -
Linux下信号与Core Dump(gdb调试)
信号:当一个进程产生异常、中断等时,操作系统则给进程发送一个信号,即向进程PCB中写入一个信息(此处即修改一个比特位(位图实现),表示进程是否收到该信号),当进程确认收到该信号则会在恰当的时间去执行其对应的相关处理动作。三种处理动作:1.忽略此信号;2. 执行该信号的默认处理动作(一般都为终止此进程);3. 提供一个用户自定义信号处理函数,内核处理时切换到用户态执行,即为信号的捕捉原创 2017-06-06 20:41:52 · 2654 阅读 · 0 评论 -
进程间通信--消息队列
进程间通信:每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据走,内核提供的这种机制称为进程间通信。通信分类:匿名管道,命名管道,消息队列,信号量,共享内存。消息队列:消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,每个数据块原创 2017-05-17 00:05:04 · 1314 阅读 · 0 评论 -
Linux下find命令的解析
find命令在目录结构中搜索文件,并执行指定的操作,掌握它的形式与用法。 1.find命令的格式 find pathname -options [-print -exec -ok ...] 2.命令参数 pathname: find命令所查找的目录路径。例如用.来表示当前录,用/来表示系统根目录; -print:find命令将匹配的文件输出到标准输出;原创 2017-03-28 19:47:44 · 7367 阅读 · 0 评论 -
内存池的实现
根据C++STL中的空间配置器,实现一个轻量级的内存池,由于空间配置器虽然解决了外部碎片的问题,提高了效率,但它的缺陷在于若使用二级空间配置器,它不会主动释放已经空闲的内存块,还给操作系统,而是将自己申请的内存块全部挂在自由链表上,自己不用,别的进程也不可以用,造成极大的内存空间的浪费,很可能导致很多别的进程无内存可用的情况。而轻量级的内存池不仅解决外部碎片问题,并且解决释放内存问题,它使用多少用原创 2017-04-18 16:48:00 · 938 阅读 · 0 评论 -
多线程编程-线程控制与属性(结合与分离)
进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,而当需要在一个进程中同时执行多个控制流程并发执行多个任务时,多线程即为出现。在linux下,一个进程中的多线程都在进程的地址空间中运行,它的控制流程可以长期并存,操作系统会在各线程之间调度和切换:特点如下1.线程都在当前进程的地址空间中运行,如图:创建一个进程需要创建自己的地址空间,创建页原创 2017-05-23 17:03:23 · 1155 阅读 · 0 评论 -
进程间通信-共享内存
共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC通信形式。是针对其他通信机制运行效率较低而设计的,往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。机制如下:特点:1.内存共享是进程间通信速度最快的:由上图可知,内存共享是进程1从其地址空间直接写到物理内存中,进程2则直接通过地址空间虚拟地址从内存中取,不需要通过进入内核来传递消息,而消息队列,原创 2017-05-23 22:54:26 · 1047 阅读 · 0 评论 -
进程间通信-管道与管道容量
匿名管道是一种最基本的IPC机制,由pipe函数创建:#include int pipe(int filedes[2]);参数:输出型参数,调用pipe函数时在内核中开辟一块缓冲区(称为管道文件)用于通信,它有一个读端一个写端,然后通过filedes参数传出两个文件描述符,filedes[0]=3指向管道的读端,filedes[1]=4指向管道的写端。返回值:pipe函数调用成功返回原创 2017-05-17 23:27:49 · 1605 阅读 · 0 评论 -
进程间通信-信号量
信号量:以保护进程互斥与同步为目的,本质上为计数器,记录与统计临界资源的数目。当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用:1.大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直至资源可用;2.当进程不再使用一个信号量控制的共享资源时,信号量的值+1(对信号量的值进行的增减操作均为原子操作,这是由于信号量主要的作用是维护资源的互斥或多进程的原创 2017-05-24 00:08:36 · 908 阅读 · 0 评论 -
Linux中shell的模拟实现
shell:Linux下,shell为操作系统的外壳,为用户提供了使用操作系统的接口,它是命令语言、命令解释程序及程序设计语言的统称。主要功能:(1)命令解释器;(2)作为一种高级程序设计语言可以编写出代码简洁、功能强大的程序。在这里主要简单实现其一大功能:命令解释器(包括重定向>的实现)主要过程:当一个用户登录后,系统会启动一个默认的shell程序:1.可以看到一个字符串和she原创 2017-05-09 21:04:38 · 3413 阅读 · 0 评论 -
守护进程
守护进程:Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着,这种进程称作守护进程;守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种原创 2017-06-16 15:37:04 · 934 阅读 · 0 评论 -
正则表达式的学习
正则表达式:处理字符串的方法,以行为单位处理字符串,其通过一些特殊符号的辅助,可以使用户轻易的进行查找、删除、替换某特定字符串的处理程序。 支持正则表达式表示法的工具程序:grep、vi、awk、sed 正则表达式分类:1)基础正则表达式;2)扩展正则表达式 而在学习正则表达式之前,首先学会工具程序grep的用法: grep [-...原创 2018-11-28 21:37:34 · 420 阅读 · 0 评论