linux
文章平均质量分 55
xuzhangze
这个作者很懒,什么都没留下…
展开
-
Linux重要文件介绍
Linux中一切即文件!即无论是文档、目录还是软件Linux系统都把它当做文件来处理。先进入根目录下,用指令ls -al 可获取如下信息: 可看到图中第一行被我用两个框分成了两部分,其中第一部分即黑框部分表示文件的种类图中只有-和d种,其实有很多种,它们分别表示: [-] 表示文件 [d] 表示目录 [l] 表示连接文件 [b] 表示设备文件里面的可供存储的接口设备 [c] 表示设备原创 2017-11-19 22:23:38 · 729 阅读 · 0 评论 -
基本IO系统调用简单应用
本文介绍5个io相关的系统调用——open、close、read、write、lseek。这5个函数被称为不带缓冲区的函数,标准C的输入输出函数就是对read和write的封装,先来看这些函数的函数原型。#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char* pathname, int原创 2018-03-28 22:24:38 · 360 阅读 · 0 评论 -
进程信号的产生
信号是信息的载体,发送某种信号即是发送传递某种信息。这里的进程信号是指软件中断,它提供了一种处理异步事件的方法。 在Linux中,我们可以用kill -l 命令查看有多少信号: 可以看到有62种信号,其中1~31号信号是普通信号,34~64属于实时信号,这里仅讨论普通信号。 不同的信号有不同的产生方式,可分为这么几类: 1、用户在终端按下某些按键时,终端驱动程序会发送信号给前台进程,...原创 2018-04-05 23:49:46 · 673 阅读 · 0 评论 -
POSIX信号量实现生产者消费者模型
POSIX信号量与System V信号量作用相同,都用于同步操作,达到无冲突的访问共享资源的目的,但POSIX信号量可用于线程间同步。 初始化信号量:#include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value);参数:pshared:0表⽰示线程间共享,⾮非零表⽰示进程间共...原创 2018-04-12 21:35:42 · 1308 阅读 · 0 评论 -
读写锁与读写者模型
在多线程编程中,有时候修改公共数据的情况比较少,而读取数据的情况比较多,这就是读写者模型了。读写者模型中的“321”: 三种关系——写者与写者之间为互斥关系,写者与读者为互斥同步关系,读者与读者之间无关系。 两种角色——读者与写者。 一个公共场所。 用读写锁可以很好的解决读写者问题。读写锁是一种自旋锁,其行为有: 读写锁接口: 初始化与销毁:#include <pthre...原创 2018-04-13 17:50:08 · 323 阅读 · 0 评论 -
进程信号的阻塞
先给出几个与信号有关的概念: 1、实际执行信号的处理动作称为信号递达(Delivery)。 2、信号从产生到递达之间的状态,称为信号未决(Pending)。 3、进程可以选择阻塞 (Block )某个信号。 4、被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执⾏行递达的动作。 PS:阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的⼀种处理动作。 ...原创 2018-04-13 20:33:40 · 1142 阅读 · 0 评论 -
死锁的产生及其解决方法
死锁的书面定义:一组相互竞争系统资源或进行通信的进程间的“永久”阻塞。 死锁原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他被阻塞进程才能触发该事件,这时就称这组进程发生了死锁。 一种死锁情况: 死锁的必要条件: 1、互斥:一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。 2、占有且等待:当一个进程等待其他进程时,继续占有已经分配的资...原创 2018-04-24 23:10:19 · 1952 阅读 · 0 评论 -
Linux下sort工具的使用
sort命令的默认作用是将文件以行为单位进行比较,然后按照升序输出。比较原则为从首字符向后,按ASCII码值逐个进行比较。 看效果:sort file常见选项使用: 1、-r 选项:将排序后的结果降序输出 使用效果: 2、-u 选项:在输出行中,去除重复行 使用效果: 3、-n 选项:sort默认以ASCII码进行比较,而-n选项则以每行中字符前的数字字符的数值进...原创 2018-07-05 15:51:31 · 1051 阅读 · 1 评论 -
Linux下uniq工具的使用
uniq工具作用效果为消除相邻的重复行,如果重复行不在相邻位置则不会消除。因此uniq一般与sort工具一起使用,作用效果与sort工具的-u选项类似。 使用效果:uniq file常用选项: 1、-c 选项:输出时,在行首显示本行在文件中出现的次数。 使用效果: 2、-d 选项:只显示重复行,不重复的则不输出 使用效果: 3、-u 选项:只显示文件中不重复的行,重...原创 2018-07-05 16:38:08 · 515 阅读 · 0 评论 -
Linux下paste工具的使用
paste工具主要用于将多个文件的内容合并输出,合并动作为按行将不同文件的行信息放在一行,默认情况下不同文件的数据用空格或tab键进行分隔。 使用效果:paste file1 file2 ...常用选项: 1、-d 选项:指定域分隔符,即指定分隔来自不同文件或不同列的行的分隔符 使用效果: 2、-s 选项:将每个多行文件合并为一行,默认用空格或tab键分隔,可用-d选项...原创 2018-07-05 17:10:03 · 2518 阅读 · 0 评论 -
Linux下cut工具的使用
cut命令从文件的每一行剪切字节、字符和字段,并写至标准输出,如果不指定file参数cut命令将读取标准输入,使用cut命令时必须指定-b、-c或-f之一。常用选项: 1、-b 选项:以字节为单位进行分割 使用效果: 2、-c 选项:以字符为单位进行分割 使用效果: PS:-b与-c的区别: -b选项是以字节进行分割,因此在显示多个字节构成的符号时就可能会出错,比如用-b分...原创 2018-07-05 17:42:11 · 1036 阅读 · 0 评论 -
生产者消费者模型
在生产者消费者模型中,生产者之间为互斥关系,消费者之间也是互斥关系,而生产者与消费者既有互斥关系又有同步关系。在这里用互斥量与条件变量来实现生产者消费者模型:#include <stdio.h>#include <pthread.h>#include <sys/types.h>#include <stdlib.h>#include <...原创 2018-04-10 17:52:36 · 112 阅读 · 0 评论 -
Linux多线程互斥与同步
有些变量被多个线程共享,这样的变量被称为共享变量,在程序中,可以通过共享变量来完成线程间的交互。但是多个线程在用共享变量进行交互时,常常会出现某些问题。来看下面代码:#include <stdio.h>#include <pthread.h>#include <sys/types.h>#include <stdlib.h>#inclu...原创 2018-04-10 16:26:33 · 343 阅读 · 0 评论 -
Linux文件目录操作基础指令
1、ls指令:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 -a:列出目录下所有文件,包括以”.”开头的隐含文件。 -l:列出文件的详细信息,包括文件类别及权限等。 可将a于l连用,可列出全部文件的全部信息。如ls -al。 2、pwd指令:显示用户当前所在的目录。可用此命令取得当前目录相对用户目录的路径。 3、cd指令:改变工作目录。将当前工作目录原创 2017-11-20 23:31:45 · 382 阅读 · 0 评论 -
GDB调试程序
今天用vim敲二叉树程序时出现了bug,因为不熟悉gdb的调试方法,所以搞了老半天才弄好,就写了这篇文章让看见的朋友在用gdb调试程序时方便一点。 首先来介绍一下调试过程中常用的指令,然后再结合具体的代码来调试一遍。 常用调试指令 gcc/g++ -g test.c/test.cpp ———-调试前先对源文件进行编译,注意一定要加 -g。 gdb a.out ——— a.原创 2017-12-02 18:56:54 · 259 阅读 · 0 评论 -
进程间通信之共享内存
我们知道进程间同行的实质是让两个进程看到同一份资源。共享内存正是让两个进程看到同一份资源的方法之一。那么两个进程怎么共享一个内存呢? 我们都知道,每个进程都有自己的进程空间,进程的虚拟地址空间通过页表映射到物理内存上,而不同的进程的虚拟地址空间是相互独立的,也就不可能出现两个进程的虚拟地址空间橡胶的情况。但是,不同的进程虚拟地址空间都要映射到物理内存中,因此如果两个进程空间映射到同一块物理内存,...原创 2018-03-24 13:56:10 · 497 阅读 · 1 评论 -
fd与FILE的比较
Linux中一切皆文件,这句话我们都知道,可见文件的重要性,因此文件的管理在Linux中占据了很大比重,那么操作系统怎么管理文件的呢? 要管理一个东西,那么必须经历两个步骤——描述和组织。当我们打开一个文件时,系统就会生成一个叫做file的结构体,系统正是用这个file结构体来描述单个文件的;既然已经描述了那么就要组织起来了,系统就会用一个数据结构把所有的文件都组织在一起以方便管理,而我们的进程...原创 2018-03-30 11:16:51 · 1587 阅读 · 0 评论 -
Linux下的多线程概念
线程是进程内部的执行单位,一个线程即使进程内的一个执行流。对于线程,每个系统的实现可能不一样,在Linux中,线程也叫轻量级进程,操作系统没有把线程与进程明显的区分开,它们的数据结构是一样的,都是task_struct。在进程资源分配时,以进程为单位进程分配;而在调度时,则以线程为单位。可以这样理解,代码最初被加载进内存中时,系统会给这些代码分配一系列资源,这样就创建了一个“进程”,而进程内部可能...原创 2018-04-07 15:44:05 · 324 阅读 · 0 评论 -
进程间通信之信号量
信号量也是三种XSI IPC之一,不过与消息队列和共享内存不同的是作为临界资源的信号量是以另一种临界资源的计数器的面目出现的。其基本作用机制为,为某种临界资源设定一定数量的信号量,当某个进程占用一份临界资源时信号量就减少相应的数值,当信号量为0时没有得到临界资源的进程就暂时性的进入“休眠”状态,待占用资源的进程将资源还回去后信号量增加,其他进程被唤醒,就又可以使用临界资源,这样就实现了临界资源的同...原创 2018-03-25 12:13:13 · 272 阅读 · 0 评论 -
说说进程
进程表述 书上对进程的叙述有很多,程序的执行实例或者正在运行的程序等,这些都是关于进程的表述;而对于内核来说是当担系统资源分配的实体。 可以想一下,当我们为执行某个功能而写一个程序后,这个程序是怎么变成一个进程的呢? 当程序被加载到内存中,从第一条指令开始执行,仅仅有代码是不能完成指定功能的,在执行过程中它需要一系列的资源(比如CPU、内存等),而操作系统又是怎么保证程序按照顺序执行的呢?操...原创 2018-03-30 21:58:31 · 188 阅读 · 0 评论 -
进程间通信之消息队列
首先说一下什么是消息队列。消息队列是进程间通信的一种,它是由操作系统维护的以字节序列为基本单位的间接通信机制,它提供了一个进程向另一个进程发送一个带类型的数据块的方法。 我们知道用管道来实现进程间通信的机制是两个进程利用管道文件来实现数据交流,那么消息队列与管道有什么区别呢? 首先看一下管道通信机制的模型: 然后消息队列通信模型: 从上面图中可看出两者有着本质的区别。那么两个进程怎...原创 2018-03-21 23:42:19 · 2379 阅读 · 1 评论 -
进程信号的捕捉
信号递达时有三种方式: 1、忽略。 2、按默认方式处理。 3、自定义处理。 如果信号的处理是自定义的,当信号递达时就调用某个用户自定义函数,这就是信号的捕捉。 当然,必须要用系统调用通过内核来实现信号捕捉。信号捕捉的整个过程: 要捕捉某个信号,首先要注册这个信号的处理函数,在以前通常会用signal函数,其函数原型为:void (*signal(int signo, void ...原创 2018-04-14 17:10:43 · 1325 阅读 · 1 评论 -
Linux多线程之创建、终止、等待和分离
线程创建函数:#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *arg);参数thread:返回线程ID。attr:设置线程的属性,attr为NULL表⽰示使⽤用默认属性。star...原创 2018-04-09 20:44:56 · 398 阅读 · 0 评论 -
进程间关系
一、进程组:一个或多个进程的集合。通常,它们与一作业相关联,可以接收来自同一终端的信号。每个进程组有唯一的进程组ID。每个进程有一个组长进程,其进程ID就是进程组ID。 组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要进程组中有一个进程存在,进程组就一直存在,与其组长是否存在无关。 用代码创建一个进程组:#include <stdio.h>#include &...原创 2018-04-15 23:21:23 · 2759 阅读 · 0 评论 -
Linux下xargs工具的使用
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它能够将标准输入或管道中的数据转换为特定命令的命令行参数,也可以将单行或多行文本输入转换为其他格式的数据,比如单行变多行或者多行变单行。xargs的默认命令是echo,默认分隔符是空格。通过xargs的处理,换行和空白都会被替换为空格。 使用效果:(默认为将多行转换为一行) 常使用选项: 1、-n 选项:指定列数...原创 2018-07-06 16:53:46 · 6148 阅读 · 0 评论