
Linux
文章平均质量分 62
Echo_Anna
这个作者很懒,什么都没留下…
展开
-
makefile下的隐式规则
在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。 “隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的Makefile中没有书写转载 2016-12-30 22:40:54 · 757 阅读 · 1 评论 -
Linux下的文件锁
文件锁是计算机文件程序机制,强制访问计算机文件只能由一个用户或在任何特定时间的过程。目的是:防止恶意的更新场景利用这种机制能够使读写单个文件的过程变得更安全。Linux下的两种常见的文件锁:1、协同锁: 协同锁要求参与操作的进程之间协同合作。例如进程A获得一个WRITE锁,并开始向文件中写入内容;但如果没有试图获取锁的进程B,也可以打开文件并向文件中写入内容。进程B就是一个原创 2016-10-20 20:52:10 · 636 阅读 · 0 评论 -
线程的笔记
线程是进程的一个实体,是CPU调度和分派的基本单位是比进程更小的能独立运行的基本单位。它是程序执行的最小单位,是进程里的一个执行路径,多个线程共同拥有系统资源,但是一个线程基本不拥有系统资源,只有运行中必不可少的资源。线程包含:一个指向当前被执行指令的指令指针、一个栈、一个寄存器的集合、一个私有的数据区。线程的优点:1、开销少,进程一般是线程的30倍的开销, 2、线程通信简原创 2016-10-30 12:04:04 · 325 阅读 · 0 评论 -
Linux进程的三态及其之间的相互转换
Linux进程在运行中不断改变其运行状态,而运行的进程有三个基本状态。1、就绪状态:当进程已分配到除CPU以外所有必要的资源,只要获得处理器便可立即执行。2、执行状态:当进程已获得处理器,其程序正在处理器上执行。3、阻塞状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态,而引起进程阻塞的事件可能有很多种,如等待I/O完成,申请缓冲区不能满足、等待信号等。原创 2016-10-07 21:13:26 · 2649 阅读 · 0 评论 -
生产者与消费者问题
出处:http://blog.youkuaiyun.com/benny_cen/article/details/3995329前面一系列练习已经把进程控制、线程、进程间通信的大概知识过了一遍,现在进入综合练习,首先练习经典问题:生产者和消费者问题1.问题概述多个生产/消费者在有界缓冲上操作。它利用N个字节的共享内存作为有界循环缓冲区,利用写一字符模拟放一个产品,利用读一字符模拟消费一个产品转载 2016-10-29 21:37:15 · 1571 阅读 · 0 评论 -
Linux系统编程——I/O多路复用select、poll、epoll的区别使用
出处:http://blog.youkuaiyun.com/tennysonsky/article/details/45745887I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一转载 2016-11-09 22:13:49 · 499 阅读 · 0 评论 -
exec函数族
exec并不是一个函数,它是一个函数族,指的是一组函数,包括了六个函数,下面就来说说家族里的兄弟姐妹:1、execl() 既然是一个家族里的一员,名字的称呼有着相同性的同时,也有着区别,execl后缀的"l"就代表着"list"的含义,即参数列表。 头文件:#include 原型:int execl(const *path,const char *arg,...)原创 2016-10-19 14:49:26 · 465 阅读 · 0 评论 -
Linux进程间通信方式
Linux下进程间通信有以下几种方式:1)管道(Pipe)和有名管道(FIFO) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,除了具有管道所具有的功能外,还允许无亲缘关系进程间的通信。2)信号(signal) 用于通知接收进程有某种事件发生,除了用于进程间通信,还可以发送信号给进程本身。信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式原创 2016-10-06 12:52:10 · 492 阅读 · 0 评论 -
进程间通信方式之信号量
信号量,又称信号灯,主要用于进程间以及同一进程不同线程间的同步手段,用来解决进程间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该变信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。其中信号量对应于某一种资源,取一个非负的整型值。信号量的值是指当前可用的资源数量,若它等于0则意味着目前没有可用的资源。信号灯与其他的进程间通信方式不太相同,因为它主原创 2016-10-28 16:02:31 · 1678 阅读 · 0 评论 -
Linux的正则表达式
出处:http://blog.youkuaiyun.com/wklken/article/details/6429526列表:Linux笔记——vim常用操作及扩展补充[手册]Linux笔记——linux常用命令集合Linux笔记——命令:awkLinux笔记——命令:sedLinux笔记——命令:grepLinux笔记——命令:findLinux笔记——命令:Sort转载 2016-11-11 23:54:02 · 1581 阅读 · 0 评论 -
Linux思考题
如果多个用户对一个文件进行操作的时候,如何解决,考虑用文件锁的形式和多路复用的形式?查阅各个网站得到下面的总结①文件锁用于多个用户共同使用或操作同一个文件。有读锁的时候可以再加读锁,不能再加写锁。有写锁的时候,不能加任何锁,加读锁时,该描述符必须是读打开,加写锁时,该描述符必须是写打开,且只在进程间有用。使用flock(锁定文件或解除锁定)函数头文件 #include定原创 2016-11-12 23:38:46 · 508 阅读 · 0 评论 -
程序结构之管程
管程是一种程序结构,是一种进程同步机制。之前的PV操作和信号量尽管是有效、简单易用的进程同步机制,但是信号机制存在缺陷,即P、V操作的使用是分散在各个进程之间的,很不利于对临界资源的统一管理,另一个是P、V操作原语的不正确使用会造成死锁。管程的基本思路是:将分散在各个进程间的临界区集中起来进行统一控制和管理,并且将系统中的共享资源用数据结构抽象地描述出来。然后对临界区的访问通过“管程”进行统一原创 2016-11-13 22:35:10 · 2611 阅读 · 0 评论 -
make命令行选项
-B--always-make强制重建所有规则的目标,不根据规则的依赖描述决定是否重建目标文件。-C DIR--directory=DIR在读取Makefile之前,进入目录“DIR”,就是切换工作目录到“DIR”之后执行make。存在多个“-C”选项时,make的最终工作目录是第一个目录的相对路径。如:“make –C / -C转载 2016-12-29 22:05:12 · 2772 阅读 · 0 评论 -
Linux下解决脚本错误
编写的脚本本身会出现许多类型的错误,基本的错误类型有两种:语法错误和逻辑错误。①语法错误是编写程序时违反了所用编程语言的规则而造成的。它是在写脚本时最容易犯的错误,也是一类最容易修改的错误。这类错误包括:格式不对,丢失和错放了命令分隔符,单词拼写错误,括号或引号不成对等。当出现语法错误时,bash就不能解释代码,并且显示出错信息,说明它认为出了什么错误,以及其大约存在在哪一行。根据这些提示,可原创 2016-12-28 22:25:21 · 1119 阅读 · 0 评论 -
Linux下的sort命令
sort命令总结功能:排序语法:sort [-bcdfimMnr][-o][-t][+-][--help][--verison][文件]参数:-b 忽略每行前面开始出的空格字符。-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。-f 排序时,将小写字母视为大写字母。-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。-c 检查转载 2016-12-27 22:53:59 · 602 阅读 · 0 评论 -
makefile详解
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一转载 2016-12-19 21:59:33 · 696 阅读 · 0 评论 -
linux系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底转载 2017-01-02 11:16:54 · 691 阅读 · 1 评论 -
Linux系统IP设置与查看命令大全
出处:http://www.pc841.com/article/20130809-16917_2.html1. 使用ifconfig命令配置并查看网络接口情况示例1: 配置eth0的IP,同时激活设备:# ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up示例2: 配置eth0别名设备 eth0:1 的IP,并添加路由# i转载 2016-12-09 21:34:51 · 1583 阅读 · 0 评论 -
Linux下的AWK详解
出处:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、n转载 2016-11-18 21:47:34 · 440 阅读 · 0 评论 -
Linux下的sed命令详解
出处:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html简介sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文转载 2016-11-17 22:46:34 · 486 阅读 · 2 评论 -
Linux的/usr目录结构和/var目录结构
紧接上一篇博客所讲述的Linux系统下的根文件系统,我们今天学习一下该根目录下/usr目录结构和/var目录结构。1、/usr目录系统:/usr/bin:多数日常应用程序存放在该目录中。如果/usr被放在单独的分区中,Linux的单用户模式不能访问/usr/bin,所以对系统至关重要的程序不应该放在此文件夹中。/usr/include:存放C/C++头文件的目录。/usr/lib:原创 2016-10-05 12:47:29 · 4691 阅读 · 0 评论 -
Linux的shell特殊字符
1、通配符 通配符用于模式匹配,如文件名匹配,路径名搜索,字符串查找 一般通配符①*星号:匹配任意字符的0次或多次出现,例如:“f*”可以匹配以f开头的任意字符串②?问号:匹配任意一个字符,例如:“f?”可以匹配f1,fa,fb等,只代表后面的一位字符③[字符组]:匹配该字符组所限定的任何一个字符,例如:f[abcd]可以匹配fa,fb,fc,fd也可 以相同地表示为f[原创 2016-11-08 22:07:09 · 1465 阅读 · 0 评论 -
网络编程之套接字
套接字是操作系统内核中的一个数据结构,网络节点间可以通过它进行相互通信。网络通信其实也还是进程间的通信,是不同计算机上的进程间通信。而在网络中,每一个节点都有一个网络地址,即IP地址,所以两个进程通信时,首先要确定各自所在的网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上很可能同时运行着多个进程,所以网络地址并不能够确定要和网络中的哪一个进程进行通信,所以这时需要更多的信原创 2016-11-05 23:07:28 · 494 阅读 · 0 评论 -
进程同步之信号量机制(pv操作)及三个经典同步问题
出处:http://www.it165.net/os/html/201312/7039.html锁机制只能判断临界资源是否被占用,所以他解决了互斥问题,但是他不能确定前面的进程是否完成,所以他不能用于同步问题中。下面就为你讲解信号量机制是如何解决这一问题的。1.信号量机制信号量机制即利用pv操作来对信号量进行处理。什么是信号量?信号量(semaphore)的数据结构为一个值和一转载 2016-11-04 22:28:09 · 9108 阅读 · 0 评论 -
进程间通信方式之管道--无名管道
紧接昨晚的利用消息队列进行进程间通信,今天讲讲利用管道进行进程间通信。在Linux中,管道通信是一种使用非常频繁的通信机制。管道在本质上也是一种文件,但是又有区别于一般的文件,因为管道可以克服使用文件会出现的问题。管道实际上是一个固定大小的缓冲区,该缓冲区的大小为1页,即4K字节,使得它的大小不像文件那样不加检验地增长。同时使用单个固定缓冲区会带来问题,比如在写管道时可能变满,当这种情况发原创 2016-10-24 22:50:49 · 614 阅读 · 0 评论 -
shell变量之环境变量
shell程序中采用变量存放字符串,但shell的变量比C语言的变量简单,没有众多存储类及类型的限制,也不需要预先定义,然后才能赋值,可以在使用时“边定义,边赋值”。shell有两种变量:环境变量和临时变量。环境变量是永久变量,其值不会随着shell脚本执行结束而消失,而临时变量是在shell程序内部定义的,其使用范围仅限于定义它的程序,出了笨程序就无法再用,因此当程序完毕后,它的值也就没有了原创 2016-10-14 10:46:10 · 3785 阅读 · 0 评论 -
基于sqlite3的利用数据库实现简单通讯录
chuyu1. sqlite3 安装1.1. 下载sqlite3源码 www.sqlite3.org 下载 sqlite-autoconf-3070701.tar.gz1.2. 解压 将下载的 sqlite-autoconf-3070701.tar.gz 解压,得到sqlite-autoconf-3070701 文件夹转载 2016-11-03 22:35:08 · 2854 阅读 · 0 评论 -
进程间通信方式之消息队列
消息队列进行通信的一些操作:1、使用msgget()函数创建打开队列;2、使用msgrcv()函数从队列中读数据;3、使用msgsnd()函数写数据到队列中;4、使用msgctl()函数控制消息队列。以下是消息队列中使用到的一些函数:1、msgget 功能:创建消息队列 头文件:#include #include #include原创 2016-10-23 21:56:37 · 3987 阅读 · 1 评论 -
线程笔记之示例
1、线程的创建#include #include void Mythread1(){ int i; for(i = 0;i < 100;i++) { printf("The thread1 is create!\n"); sleep(1); }}void Mythread2(){ int i;原创 2016-11-02 21:39:23 · 447 阅读 · 0 评论 -
多路复用之poll函数
多路复用不关有select函数,还有poll函数poll()函数头文件:#include #include 功能:把当前的文件指针挂到等待队列原型:intpoll(struct pollfd *fd,int numfds,int timeout)说明:fds:用于描述需要对哪些文件的哪种类型的操作进行监控,numfds:需要监听的文件个数,即第一个参数所指向原创 2016-10-22 07:26:01 · 483 阅读 · 0 评论 -
进程间通信方式之管道--有名管道
接上一篇的无名管道,今天总结一下进程间通信的有名管道。有名管道可以克服无名管道的一个限制,即因为没有具体的名字,它只能用于具有亲缘关系的进程间的通信。原因是有名管道提供了一个路径名与之关联,并以FIFO的文件形式存在于文件系统中。于是,即使与FIFO的创建进程不存在亲缘关系的进程,只要有可以访问该路径,FIFO就可以为它们提供通信,所以有名管道不仅可以用于有亲缘关系间的通信,也可以用于无亲缘进原创 2016-10-25 22:51:03 · 525 阅读 · 0 评论 -
Linux的链接
Linux下具有为一个文件起多个名字的功能,称为链接。如果被链接的文件被存放在系统的目录下,则必须取不同的文件名,而不用再硬盘上为同样的数据重复备份;但如果被链接的文件是存放在不同的目录下,被链接的文件则可以使用相同的文件名,因此只要对一个目录下的文件进行修改,就会完成对所有目录下同名链接文件的修改。需要注意的一点就是,对于某个文件的各链接文件,可以给它们指定不同的存取权限,以控制对信息的共享和增原创 2016-09-30 09:58:06 · 443 阅读 · 0 评论 -
Linux的socket编程详解
出处:http://blog.youkuaiyun.com/hguisu/article/details/7445768/1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)转载 2016-11-06 22:31:35 · 500 阅读 · 0 评论 -
Linux的根文件系统
我们平时接触的Windows,将磁盘看作C盘、D盘几个独立的分区,但Linux则不一样,它将整个文件看作一个树形,该树的树根叫作根文件系统,用“/”表示,各个分区通过挂载以文件夹的形式访问。以下即为根文件系统:1)/bin:存放了供所有用户使用的完成基本维护任务的命令,bin表示二进制文件,通常为可执行文件。一些常用的系统命令,如cp、ls等都保存在该目录下。2)/boot:存放的是启原创 2016-10-04 00:31:13 · 454 阅读 · 0 评论 -
进程间通信方式之信号
信号是进程间通信机制中唯一的异步通信机制,可以视为异步通知,通知接收信号的进程有哪些事件发生看,还可以传递附加信息。从软件层次上说,信号是对中断机制的一种模拟,当一个进程收到一个信号与处理器收到一个中断请求是一样的。因为信号是异步的,所以一个进程不必通过任何操作来等待信号的到来,同时进程也不知道信号什么时候到来。信号的来源分为两种:1、硬件来源:比如按下了键盘或其他硬件故障;2、软件来源:原创 2016-10-27 12:36:46 · 957 阅读 · 0 评论 -
Linux下的僵尸进程及避免方法
僵尸进程就是已经结束了的却还没从进程表中删除的进程。毋庸置疑,僵尸进程过多会导致进程表里面条目满了,从而导致系统奔溃,并不占用系统资源。僵尸进程很特殊,因为在进程的状态中,它放弃了几乎所有内存空间,没有任何可执行代码,也不可以被调度,只在进程列表里中保留一个位置,记载该进程的退出状态等信息,以便其他进程收集。 产生的原因:每个Linux进程在进程表里都有一个进入点,核心程序执行该进原创 2016-10-03 11:03:44 · 575 阅读 · 0 评论 -
Linux里守护进程的三言两语
守护进程:在Linux操作系统中,是一种运行在后台的特殊进程,独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。因为由于在Linux中,每个系统与用户进行交流的界面称为终端,每个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离终端的目的是为了避免进程在运行的过程中的信息原创 2016-10-17 15:11:11 · 496 阅读 · 1 评论 -
带缓冲的I/O操作
标准I/O库提供缓冲,从而尽可能地减少使用read和write调用的次数,对每一个I/O流自动地进行缓冲管理,避免应用程序需要考虑这一点所带来的麻烦。以下是标准I/O所提供的三种类型的缓冲:1)全缓冲只有在填满标准I/O缓冲区后才进行实际I/O操作。对于驻留在磁盘上的文件,通常是由标准I/O库实施全缓冲的。一个流上执行第一次I/O操作时,相关标准I/O函数通常调用malloc获得需要使原创 2016-10-02 23:42:31 · 543 阅读 · 0 评论 -
makefile的语法及写法
0 Makefile概述 -------------------------------------------------------------------------------- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要转载 2016-11-07 22:07:26 · 459 阅读 · 0 评论 -
进程间通信之系统V共享内存
今天讲一讲进程间通信的另一种方式:系统V共享内存。系统V共享内存是指:把所有共享数据放在共享内存区域,任何想访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面,系统V通过映射特殊文件系统shm中的文件实现进程间共享内存通信的,即每个共享内存区域对应特殊文件系统shm中的一个文件。系统V共享内存原理:进程间需要共享的数据被放在一个叫作IPC共享内原创 2016-10-26 22:53:23 · 898 阅读 · 0 评论