Linux
文章平均质量分 66
persistence_s
这个作者很懒,什么都没留下…
展开
-
Linux权限问题以及Stat命令中的Access、Modify、Change
Linux下用户分成三类:文件的拥有者 、文件的所属组、 其他创建一个HHH的目录1、使用chmod 400 HHH命令将HHH的权限修改成为只读的如果我们想要列出这个目录下的所有内容,首先得进入这个目录,再采用ls的指令,但是仅凭只读权限是进入不了的,因此再增加这个目录的权限,使用chmod 500 HHH 命令将HHH的权限修改成可读可执行的此时再使用原创 2017-03-21 11:53:55 · 582 阅读 · 0 评论 -
Linux进程间通信之消息队列
消息队列的特点 1、生命周期随内核 2、双向通信 3、按块大小读写//不像管道是面向字节流的 这些接口都是System V标准 消息队列的创建: #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgget(key_t key, int msgflg);key代表要创建的消息队列的标识 m原创 2017-06-03 20:17:49 · 284 阅读 · 0 评论 -
Linux进程间通信之共享内存
共享内存的实现:两个不同进程共享同一块物理内存,达到访问同一份资源的目的 共享内存是所有进程间通信速度最快的一种方式,省去了数据的copy 在消息队列中就是server和client都读取了对方的数据并拷贝下来,因此有两次拷贝但是共享内存优缺点:他自身不提供同步于互斥机制(可以通过信号量来实现) 一般申请内存,都是按照一页的大小,避免内存碎片(4K为一页) 如果申请到的内存不够一页那么操作系原创 2017-06-03 21:37:05 · 635 阅读 · 0 评论 -
Linux进程间通信之管道
管道用于进程间的通信,进程间通信的 公共资源叫做临界资源,访问临界资源的代码叫做临界区 。管道文件以p开头,管道是一种最基本的IPC机制 管道又有匿名管道和命名管道之分匿名管道: 调用pipe函数时在内核开辟一块要缓冲区(称为管道)用于通信,但是由pipe创建的管道只能用于具有亲缘关系之间的通信,因为必须要拥有一样的文件描述符表。管道是一种最基本的 IPC机制,由pipe函数创建: #in原创 2017-06-03 19:57:46 · 302 阅读 · 0 评论 -
浅谈死锁
什么死锁: 是两个或者两个以上的进程由于竞争资源而造成的的一种相互等待的线性,如无外力作用,这些进程将永远不能再向前推进。 陷入死锁状态的进程称为死锁进程,所占用的资源或者需要他们进行某种合作的进程就会相继陷入死锁,最终可能导致整个系统瘫痪死锁的常见情形: 一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占用着的原创 2017-06-08 01:44:09 · 1088 阅读 · 2 评论 -
Linux下的SIGCHLD信号
在之前我们为了避免出现僵尸进程我们采用了两种方式 1、调用wait()函数使父进程去等待子进程。wait()是一种阻塞等待 2、调用waitpid()函数这也是父进程去等待子进程而waitpid()分为阻塞式等待和非阻塞式等待,轮询的方式就是建立在非阻塞等待的基础之上的而SIGCHILD信号也可以避免出现僵尸进程创建僵尸进程#include<stdio.h>#include <unistd.原创 2017-07-02 08:02:45 · 609 阅读 · 0 评论 -
生产者消费者模型
生产者消费者模型遵循三二一原则 三种关系:生产者和生产者 :互斥 消费者和消费者:互斥 生产者和消费者:同步与互斥 两种角色 一个交易场所条件变量的作用:判断临界资源中生产消费的条件是否成熟通常情况下互斥锁和条件变量搭配使用对单链表的操作#include<stdio.h>#include<pthread.h>#i原创 2017-07-02 08:21:22 · 305 阅读 · 0 评论 -
信号屏蔽pending
实际执⾏行信号的处理动作称为信号递 达(Delivery),实际的处理方式有三种。 1、忽略带信号 2、默认处理动作 3、自定义处理动作 信号从产⽣生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。被阻塞的信号产⽣生时将保持在未决状态,直到进程解除对此信号的阻塞, 才 执⾏行递达的动作。 注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,原创 2017-06-27 15:54:47 · 352 阅读 · 0 评论 -
守护进程
守护进程也称精灵进程( Daemon),是运行在后台的⼀一种特殊进程。它独立于控制终端并 且周期性地执行某种任务或等待处理某些发生的事件。守护进程是⼀一种很有用的进程。 Linux的⼤大多数服务器就是⽤用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd 等。同时,守护进程完成许多系统任务。比如,作业规划进程crond等 Linux系统启动时会启动很多系统服务进程,这些系原创 2017-07-05 21:56:30 · 409 阅读 · 0 评论 -
crond和crontab
Crond是linux系统用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们安装完CentOS5/6linux操作系统之后,默认便会启动Crond任务调度服务。Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作。这个Crond定时任务服务就相当于我们早上使用的闹钟一样。crontab是一个很方便的在原创 2017-07-16 10:46:15 · 335 阅读 · 0 评论 -
CRC校验
差错控制 传输过程中可能会产生比特差错:1可能会变成0而0也可能变成1 为了保证数据传输的可靠性,在计算机网路输数据时,必须采用各种差错检测措施 循环冗余检验CRC 在数据链路层传送的帧中,广泛使用了循环冗余检验CRC技术 在发送端,先把数据划分成组,假设每组k个比特,假设待传送的一组数据M=101001(现在k=6)。我们在M的后面再添加差错检测用的冗余码一起发送冗余码的计算 用二原创 2017-07-09 08:44:16 · 1508 阅读 · 0 评论 -
子进程的异步等待方式
SIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。#include<stdio.h>#include <sys/types.h>#include <sys/wait.h>#include<signal.h>void myhandler(int sig){ printf("i原创 2017-07-09 09:44:40 · 213 阅读 · 0 评论 -
可重入函数与线程安全
可重入函数: 可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。 (1)可以在执行的过程中可以被打断; (2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。 (3)再次调用执行完之后,被打断的上次调用可以继续恢复执行原创 2017-07-09 10:52:09 · 542 阅读 · 0 评论 -
线程的互斥机制
线程的存在是为实现资源的共享。 因此多个线程程同时访问共享数据时可能会冲突,为了解决这种冲突我们需要引入互斥锁。互斥锁的目的是为了保护公共资源(临界资源),但是互斥锁自身又要被多个线程所看到,因此互斥锁也是一个临界资源。因此在上锁和解锁的时候一定要保证原子操作,否则这个互斥锁就会变得毫无意义,使得多个线程依然可以去同时访问这个临界资源。 多个线程产生访问冲突会导致不可预知的结果,举个例子:#in原创 2017-06-07 22:06:45 · 535 阅读 · 0 评论 -
浅析Linux下的信号量
信号量用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行,初始化,递减和增加,这三种操作都是原子操作。递减的操作可以用于阻塞一个进程,增加操作可以用于接触阻塞一个进程。因此信号量也可以称之为一个计数器。信号量(信号量本身是一个计数器)–是用来描述临界资源的,当中资源的的数目的计数器 信号量就是为了实现同步与互斥机制(保护临界资源) 信号量计数非0即1的叫做二元信号量 但是这个计数器原创 2017-06-03 18:08:34 · 4534 阅读 · 1 评论 -
浅谈线程
线程的引入:在之前提及到进程的概念包含两个特点: 1、资源所有权:每个进程都有自己独立虚拟的地址空间(在Linux下即为一个mm_struct的结构体)。这同时也代表了进程是独占资源的:(这些资源包含内存,I/O通道,I/O设备和文件),操作系统执行保护功能以防止进城之间发生不必要的与资源相关的冲突。2、调度/执行 一个进程是否被调度,是有调度器决定的,进程是调度的基本单位。这两个特点都是独立的原创 2017-06-04 21:35:50 · 356 阅读 · 0 评论 -
Linux脚本里使用未知参数设置变量名
在脚本里使用位置参数设置变量名,在终端命令行输入实际变量名,可以灵活的更改 先创建2个文件:[admin@localhost Linux]$ vim m1.c[admin@localhost Linux]$ vim m2.c[admin@localhost Linux]$ cat m1.cecho "you are a girl"[admin@localhost Linux]$ cat m原创 2017-03-29 00:15:21 · 573 阅读 · 0 评论 -
shell脚本下的循环语句for、while、until
在shell 脚本下的for循环语句 第一种格式:for curvar in listdo statementsdone对于list中的每一个值都要执行一次statments时应利用这种格式,对每次循环都是把list中的当前值赋值给变量curvar,list可以是含有几个项的变量也可以是用空格分隔的值表。 实例1:打印1~6[admin@localhost Linux]$ vim 1.b原创 2017-03-29 18:14:19 · 744 阅读 · 0 评论 -
对fork()函数的初步认识
用户->外壳程序(shell,lib)->系统调用->操作系统->驱动->底层的软硬件 系统调用实际上是操作系统对外提供的接口进程与普通程序的差别 在Linux下一切皆文件,程序也就是一些二进制文件,开始是在硬盘上存放的的。 //如果我们将这个程序跑起来,那么这个程序得加载到内存中成为可执行程序。 进程与普通程序的区别:进程具有PCB(进程控制块)她是用来描述进程信息的 进程是一个实体,每原创 2017-04-08 18:08:55 · 292 阅读 · 0 评论 -
Linux中设置粘滞位
关于目录有三种权限: r - -可读权限,可以列出目录下的内容(但如果要列出目录下的内容必须要能进入这个目录所需要的权限为 r-x) -w-可写权限,可以往目录里些内容(但是如果如果往目录里面些内容,那么这个目录的权限至少是-wx,首先得进入这个目录) - -x可执行的权限,可以进入一个目录(但是不能读或者写) 因此如果用户要进入一个目录,那么权限至少–x关于文件的三种权限: r原创 2017-03-26 18:02:30 · 1461 阅读 · 0 评论 -
Linux下find查找命令用法
Linux下find命令在目录结构中搜索⽂文件,并执⾏行指定的操作。 Linux下find命令提供了相当多的查找条件,功能很强⼤大。由于 find具有强大的功能,所以它的选项也很多,其中⼤大部分选项都值 得我们花时间来了解⼀一下。即使系统中含有网络⽂文件系统( NFS), find命令在该⽂文件系统中同样有效,只你具有相应的权限。 在运行⼀一个⾮非常消耗资源的find命令时,很多⼈人都倾向于把它放在原创 2017-03-26 14:45:04 · 709 阅读 · 0 评论 -
打造自己的vim配置
如果我们安装了vim这个编辑器,那么会在/etc下面有一个vimrc的配置 我们可以看一下这个vimrc的配置信息[root@localhost etc]# cat vimrc if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" set fileencodings=ucs-bom,utf-8,latin1endifset nocompatible原创 2017-03-26 23:14:17 · 428 阅读 · 1 评论 -
Linux进程管理之task_struct
进程和进程块 什么是进程? 进程就是一个正在执行的程序 进程就是正在计算机上执行的程序实例 能分配给处理器并由处理器执行的实体 什么是进程控制块? 当一个程序被加载到内存中会为它分配一个进程控制块,这个进程控制块(PCB)由操作系统创建和管理.在Linux下PCB就是一个task_struct的结构体,这个结构体就是用来描述进程的信息。操作系统是如何管理所有进程呢,就是通过每个进程的描原创 2017-04-14 22:51:53 · 373 阅读 · 0 评论 -
Linux之内存管理mm_struct
每个进程都有自己的mm_struct,使得每个进程都有自己独立的虚拟的地址空间 在每个进程的task_struct里都会有一个struct mm_struct*指向每个进程自己的mm_struct,mm_sruct是内存描述符,在每个mm_struct又都有一个pgd_t * 使其指向页表,然后通过页表实现从虚拟地址到物理地址的映射。Linux虚拟地址用户空间分布 struct mm_struc原创 2017-04-15 12:07:36 · 3915 阅读 · 0 评论 -
Linux下的fd和fp
通常我们写一个C程序在C标准库上进行一系列的编程,但是在c程序里如果我们要打开一个文件,我们都知道文件开始是存在硬盘上的,而操作文件是通过操作系统的。 那么我们就需要通过操作系统暴露的一些接口去间接的操作文件,而系统调用就是操作系统向外暴露的接口。 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引原创 2017-05-13 16:07:56 · 1543 阅读 · 0 评论 -
Linux下的exec函数
在进程间的程序替换 用fork创建子进程后执行的是和父进程相同的程序(但有可能执⾏行不同的代码分⽀支), 子进程往往要调用一种exec函数以执⾏行另⼀一个程序。 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。 调用exec并后该进程的id并未改变。不创建新进程,所以调用exec前后该进程的id并未改变。因此在task_struct中的其原创 2017-05-16 15:09:06 · 1195 阅读 · 0 评论 -
Linux下实现myshell的重定向
实现myshell 的重定向实际上就是进程间的程序替换 由于要替换的ls程序是在/usr/bin目录下的ls程序 因此可以直接使用带p的exec函数,由于我们需要从标准输入中读数据,并且将这些命令参数解释出来用此我们需要一个指针数组来保存这些输入的命令参数 因此我们需要使用execvp函数 如果我们需要实现myshell的重定向,我们需要改变输出的重定向,那么我们需要改变文件描述符所指向的内原创 2017-05-16 15:25:47 · 1088 阅读 · 0 评论 -
Linux下管道的实现机制
查看Linux下管道的默认大小可以使用命令ulimit -a 尽管命令ulimit -a看到管道大小8块,缓冲区的大小不是4 k,因为内核动态分配最大16“缓冲条目”,乘64 k验证管道的容量: 管道是一种最基本的 IPC机制,由pipe函数创建: 调用pipe函数时在内核中开辟⼀一块缓冲区(称为管道)用于通信,它有⼀个读端一个写端,然后通 过filedes参数传出给用户程序两个⽂文件描原创 2017-05-27 10:57:44 · 1403 阅读 · 0 评论