Linux/操作系统
文章平均质量分 62
xy913741894
这个作者很懒,什么都没留下…
展开
-
Linux学习笔记(1)---文件/目录权限
文件权限与目录权限的意义以及区别原创 2017-03-17 17:02:20 · 400 阅读 · 0 评论 -
进程通信--总结
关于进程通信,我整理了一下自己所总结的几篇文章以供以后复习查阅。进程通信的一些基本概念:进程通信概念和进程通信方式进程通信的几种方式:信号量:信号量(生产者和消费者模型) 和 信号量(进程通信)共享内存: 共享内存(进程通信)消息队列: 进程通信之消息队列管道:进程通信之管道(PIPE)原创 2017-05-20 17:37:56 · 1096 阅读 · 0 评论 -
了解程序,进程和线程
进程是OS处于执行状态程序的抽象1.程序 = 文件(静态可执行文件)2.进程 = 执行中的程序 = 程序 + 执行状态3.同一个程序多次执行对应为不同的进程进程执行需要的资源内存:保存代码和数据CPU:执行指令线程线程是进程的一部分,用来描述指令执行流状态,它是进程中指令执行流的最小单元,是CPU调度的基本单位。原创 2017-04-11 18:23:09 · 378 阅读 · 0 评论 -
shell脚本运行的原理(source命令等)
Shell英文意思是外壳, 用户可以通过Shell和操作系统交互,通俗的讲Shell就是一个解释器,当我们输入命令Shell就解释执行,Shell有很多版本,我们一般使用的都是bash,在Linux输入一条命令可以查看当前正在使用的Shell:echo $SHELL屏幕会出现:/bin/bashShell有两种方式:因此,我们主要来学习Shell脚本编程。在理解Shell脚本运行的原理之前,我们必须原创 2017-06-28 16:29:36 · 9368 阅读 · 0 评论 -
shell脚本编程实例--进度条,求和&平均值,斐波那契,改变字符串大小顺序
利用求1+2+3+…+100的和,要求打印出1+2+3+…+100=5050我想了两种方法:字符串拼接依次打印两种思路代码如下://依次打印sum=0for ((i=1; i<=100; i++))do if [ $i -eq 100 ];then echo -n "$i=" break fi echo -n "$i+"原创 2017-06-28 21:33:17 · 946 阅读 · 1 评论 -
理解重定向之dup,dup2
Linux下当使用 ls > file 命令,可以将原本输出在屏幕上的文字重定向到file文件中(如果没有file文件则创建之)我们可以利用dup,dup2函数也实现一下重定向。它们的接口如下:#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);dup(fd)是对fd进行一份拷贝,将当前最小未被使用的文件描述符原创 2017-06-22 17:35:47 · 1147 阅读 · 0 评论 -
sed,awk工具学习
sed工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才原创 2017-07-02 22:02:51 · 489 阅读 · 0 评论 -
多线程编程1 --线程创建,退出,等待,分离
线程的基本概念线程是在进程内部运行的一个执行分支,它是运行在进程的地址空间中。和进程之间的独立性不同,线程之间更强调共享性,它共享进程的地址空间,比如数据段,代码段,堆。。。以及文件描述符表。因此,无论是线程的创建,终止,切换的代价都要比进程小很多,线程之间可以直接通信而不需要向进程通信那么麻烦(共享内存,消息队列,信号量等机制),当然有优点就有缺点,由于线程强调共享性,一个进程内的所有线程是互相影原创 2017-06-11 23:26:08 · 1232 阅读 · 0 评论 -
TCP小型服务器(poll)
我们之前写过多线程,多进程,select机制的TCP服务器,作为IO复用的另一种机制poll,我们也有必要去学习一下,下面就是基于poll机制的服务器。makefile.PHONY:allall:client serverclient:client.c gcc -o $@ $^server:server.c gcc -o $@ $^server/***************原创 2017-07-03 21:17:37 · 592 阅读 · 0 评论 -
正则表达式以及grep,cut等命令学习
所谓正则表达式,简单来说就是一种处理(复杂)字符串的方法,它以行为单位,通过添加一些特殊符号来达到增删查改字符串的目的。正则表达式可分为以下三个内容:比如我们要匹配以123开头中间有3个x字符的字符串:其中^表示开头,也就是位置限定符,.* 表示没有字符,任意一个字符或者任意 多个字符,其中.表示字符类,而 * 表示数量限定符。下面我们来详细讲一讲这三者。关于标准正则和扩展正则表达式的区别:其实它们原创 2017-07-02 17:42:13 · 729 阅读 · 0 评论 -
shell字符串匹配
一、简介 Bash Shell提供了很多字符串和文件处理的命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容比较多故单独列出,本文只涉及字符串的处理和部分文本处理命令。二、字符串处理1、expr命令expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等转载 2017-07-04 19:47:24 · 55133 阅读 · 0 评论 -
shell脚本中倒引号,$(), eval的区别
在Shell脚本中,当我们vim test.sh输入以下文本:echo dateecho `date`原创 2017-06-26 16:53:42 · 661 阅读 · 0 评论 -
多线程编程2--线程的同步和互斥
当多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图。 如果每个线程内部的变量其他线程都不会访问到,那么就不存在一致性问题; 如果变量是只读的,那么多个线程同时访问它也不存在不一致性问题; 但是,一旦一个变量是可写,当一个线程对它进行修改的时候,其他有可能对它进行读取或者写入操作从而导致数据不一致的问题。此时就需要同步机制来保证。APUE上给出一个例子:由于递增操作不是原原创 2017-06-14 22:51:12 · 581 阅读 · 0 评论 -
gcc中(-I -l -L)参数的意义
关于编译连接的常识helloworld背后发生了什么?(CSAPP笔记2)gcc -o hello hello.c -I/home/hello/include -L/home/hello/lib -lworld//有时候还需设置环境变量 LD_LIBRARY_PATH前面的编译选项,一般来说大家都熟悉,关键是后面几个,我们逐一解释: -I/home/hello/include我们知道原创 2017-07-15 11:13:30 · 1094 阅读 · 0 评论 -
信号量(进程通信)
关于进程通信方式,我之前整理如上图。今天,我们主要通过实例(代码编写)来深入了解信号量。关于信号的概念,基础知识等我在信号量(生产者和消费者模型)以及进程通信概念和进程通信方式这两篇文章都有总结,不再赘述。我们通过了解Linux下关于信号量函数接口,以及代码编写复习,熟悉信号量。PS:代码均在Ubuntu16.04下测试。什么是信号量在前面,我们提过,信号量主要用于互斥或者同步机制。信号量本质上是一原创 2017-05-20 10:21:01 · 1207 阅读 · 1 评论 -
共享内存(进程通信)
前面介绍了进程通信的几种方式,信号量,管道,消息队列,今天主要总结下共享内存的知识点。什么是共享内存我们一张图来解释什么叫共享内存。我们知道,每个进程都有一个叫PCB(Linux下一般为task _ struct)的数据结构,用于保存进程的相关信息。我们可以通过PCB找到进程地址空间,进程地址空间一般包括栈,堆,数据段,代码段等等,需要明确的一点就是用户访问的都是虚拟内存,操作系统是通过页表+MMU原创 2017-05-20 17:26:35 · 7879 阅读 · 5 评论 -
gdb调试多线程多进程程序
gdb的简介和功能:gdb是GNU开发的一个在Unix,Linux上使用的C/C++和汇编语言程序的调试工具,它主要帮助用户在调试程序时完成以下工作:启动程序,按照用户要求影响程序的运行设置断点,在指定位置停止当程序停止,检查它出现什么问题动态改变程序的执行环境,可以先纠正一个错误,然后再纠正其他错误使用gdb为了发挥gdb的功能,需要在编译源程序时加上-g选项,这样才能够在目标代码加入调原创 2017-06-15 22:47:00 · 774 阅读 · 0 评论 -
理解stat命令下3个时间概念---Linux学习笔记(2)
当我们使用stat命令去查看文件/文件系统的详细信息,会出现这样的界面:我们注意到红线圈出来的地方:会出现3个类型的时间,分别是Access,Modify,Change。这三个时间分别代表了什么?Access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。如果现在我对这个文件进行了访问,比如cat text注意到只有Access time改变了,其他两个不变。Modify time:原创 2017-03-17 17:57:33 · 409 阅读 · 0 评论 -
文件的特殊权限:SUID,SGID,SBIT---linux学习笔记(3)
我们都知道文件权限有rwx这三种,但是我们如果试着这么做:好像还有其他权限(s,t)?这就是我们要说的文件特殊权限。SetUID定义:当s标志出现文件所有者(user)的x权限上时,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限,如上述passwd的rwsr-xr-x,我们称为SetUID,简称SUID的特殊权限。它有以下几点限制和功能:1. SUID只对二进制文件有效 2.原创 2017-03-28 10:41:05 · 423 阅读 · 0 评论 -
Linux之find命令使用 ---Linux学习笔记(4)
Linux下find命令用于搜索文件,并执行相关操作。它是一个很强大的查找命令,缺点是查找速度比较慢,因为它不同于whereis,locate这些直接从数据库中查找,而是从硬盘上查找,因此耗费时间较多。find命令很强大,同时它的选项也很复杂,因此需要我们仔细去学习。find格式大概如下:find [pathname] [option] [action]pathname: find命令所查找的目原创 2017-03-29 12:15:41 · 455 阅读 · 0 评论 -
linux下vim配置
我的vim配置主要有以下优点:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码4.按“F2”可以直接消除代码转载 2017-04-04 20:41:48 · 264 阅读 · 0 评论 -
Linux下task_struct
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 在Linux 中每一个进程都由task_ struct 数据结构来定义. task_ struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork()原创 2017-04-13 16:10:32 · 382 阅读 · 0 评论 -
信号量(生产者和消费者模型)
信号量和管程都是操作系统用于同步提供的两种方法,我们将结合生产者与消费者模型对此进行学习。什么是信号量?为了提高系统的并发性,我们引入了多进程,多线程,但是这样子带来了资源竞争,也就是多个程序同时访问一个共享资源而引发的一系列问题,因此我们需要协调多线程对与共享资源的访问,在任意时刻保证只能有一个线程执行临界区代码。为了实现同步,我们可以利用底层硬件支持,也可以利用高层次的编程抽象,信号量和管程属于原创 2017-04-30 20:08:15 · 10698 阅读 · 0 评论 -
管程
在信号量(生产者和消费者模型)中,我们了解了信号量用于同步,互斥的用法,然而,在生产者和消费者模型中,为了实现同步,我们需要将PV操作放在不同进程(线程)中去实现,这大大增加了我们编程的难度以及出错的概率,因此能否将PV操作集中在一个模块中实现?当然有!这就是我们接下来需要讲的管程。mooc课对于管程的介绍如下:通俗一点讲,管程就是将共享变量和对它们的操作集中在一个模块中,这就像我们在写C++类时,原创 2017-04-30 21:46:28 · 675 阅读 · 0 评论 -
进程切换,创建,加载,等待与退出
进程切换进程状态:一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。在操作系统中,常见的进程状态是三状态模型,也就是就绪,运行,阻塞(等待),它们的关系如下图:当然,对于一个实际的系统,进程的状态及其转换更为复杂。为此我们引入了新建态和终止态构成了进程的五态模型:关于更详细的进程状态点击此处查看。在这里,我们聊一聊进程之间的切换。进程切换,又叫上下文切换原创 2017-04-29 18:06:22 · 859 阅读 · 1 评论 -
C语言的存储空间布局
正文段:CPU执行的机器指令部分,通常,正文段可共享,而且是只读的,以防止程序由于意外而修改其自身的指令。初始化数据段:通常将此段称为数据段,它包含了程序中需要明确赋初值的变量,比如,C语言在函数外的声明:int max = 100;也就是全局变量,静态全局变量带初值存放在初始化数据段非初始化数据段:通常将此段成为bss段,bss来自早期的汇编运算符,意思是“block started by sym原创 2017-05-03 21:08:38 · 673 阅读 · 0 评论 -
进程通信之管道(PIPE)
在前面进程通信概念和进程通信方式,我们了解了进程通信的简单概念以及4种进程通信的方式,今天我们将要通过具体实例来学习,理解进程通信方式中的管道(PIPE)。本文所有代码都在Ubuntu16.04测试。我们在前面已经了解了常用的进程间通信方式,它们大致可以以如下方式分类:A. 传统的进程间通信方式 无名管道(pipe)、有名管道(fifo)和信号(signal)B. System v IPC对象原创 2017-05-15 17:03:51 · 3273 阅读 · 0 评论 -
实现一个简单shell(支持重定向)
5.16更新:支持重定向我们知道对于Linux,shell就是个命令行解释器,当我们输入相关的命令,会去执行相关的操作。比如当我们输入ls -a -l命令,shell就会打印出当前目录的内容,这是如何实现的?shell自己就是一个进程,当我们输入ls之类的命令,它会通过fork,exec函数去创建一个新的子进程去执行相关操作。因此我们也可以利用这个来实现一个简单的shell。当然,这个shell足够原创 2017-05-10 22:55:37 · 7526 阅读 · 2 评论 -
死锁,银行家算法
死锁:由于竞争资源和通信关系,两个或者更多线程在执行中出现,永远相互等待只能由其他进程引发的事件我们知道操作系统中很多种资源,如CPU,内存,IO设备等,每种资源又有很多实例,对于这些资源,进程该如何访问?请求/获取:申请空闲资源使用/占用:进程占用资源释放:资源状态由占用变为空闲为了更好的了解死锁,我们将资源分类:造成死锁必须要满足以下条件: 如果在系统中已经出现死锁后,应该及时检测到死锁原创 2017-05-08 17:05:23 · 962 阅读 · 0 评论 -
进程通信概念和进程通信方式
进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。IPC提供两个基本操作:发送(send message)接收(receive message)进程通信流程:在通信进程之间建立通信链路通过send/receive交换信息进程通信方式: 直接通信: 进程必须正确命名对方,比如send(p,message)向p发送信息,receiv原创 2017-05-08 19:11:01 · 11640 阅读 · 2 评论 -
进程通信之消息队列
在前面,我们了解进程通信的概念以及常见的进程通信方式,我做个整理如下图:我们继续通过实例来学习进程通信,今天主要是讲消息队列是如何实现进程通信的,代码均在Ubuntu16.04下测试。如上图所示,消息队列是一种间接的通信方式,它提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同原创 2017-05-17 10:19:09 · 945 阅读 · 0 评论 -
Linux指令ps,top
主要整理下一些Linux下自己平时很少用到但是应该了解的命令,目前整理了以下命令: ps top artop每天一个linux命令(44):top命令pspsarar命令ld原创 2017-08-16 16:59:42 · 526 阅读 · 0 评论