linux
文章平均质量分 60
白帽子hhh
这个作者很懒,什么都没留下…
展开
-
LRU缓存机制
题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删...原创 2019-06-22 17:00:15 · 356 阅读 · 0 评论 -
哲学家就餐问题
哲学家就餐问题:五个哲学家五根筷子,如果哪个科学家饿了,则先拿起左边的筷子,再拿起右边的侉子,但是只有同时拥有左右筷子即可进食,因此如果出现极端的情况:五个哲学家都饿了,那么他们同时拿起自己的左筷子,那么他们都没有右筷子,这时谁都不愿意放弃自己的左筷子,这就导致谁都吃不到东西,这就导致了死锁。解决这一问题的方法是:每根筷子设置为信号量,左右2根筷子要么不分配,要么都给,即用信号量将其控制起来,原创 2018-04-26 10:32:48 · 583 阅读 · 0 评论 -
信号量
信号量主要是用于进程同步和互斥的。进程互斥:系统中某些资源在一段时间只能允许一个进程使用,这种资源较临界资源,或者互斥资源,而通常由于各个进程要求共享资源,但是临界资源需要互斥使用,因此各个进程间竞争使用这些临界资源,进程间的这种关系叫做进程间的互斥。进程同步:多个进程需要相互配合共同完成一项任务。信号量:互斥是P,V在同一个进程;同步是P,V在不同进程中。信号量值S>0,S表示资源可原创 2018-04-26 10:31:25 · 274 阅读 · 0 评论 -
共享内存
共享内存是最快的进程间通信的方式,2个进程通过将一块共享内存映射(挂载)到自己的虚拟地址空间,那么这俩个进程操作的将会是同一块内存。关于共享内存,我们研究以下几个问题:(1)共享内存的创建或者打开(2)将共享内存挂载到一个进程的虚拟地址空间(3)卸载共享内存段(断开进程与共享内存的挂载)(4)删除共享内存(彻底删除)具体实现:(1)创建共享内存 7 in原创 2018-04-26 10:12:19 · 187 阅读 · 0 评论 -
ftruncate函数
int ftruncate(int fd,off_t length)功能:把fd文件描述符所指向的文件大小设置为length命令 ls -l 文件名:查看文件大小以及其他信息命令 od -c 文件名:显示文件中所有内容(按照文件大小,没有的显示为\0)案例: 1 #include 2 #include 3 #include 4原创 2018-04-12 21:59:57 · 1724 阅读 · 0 评论 -
关于系统内可打开文件上限
命令 ulimit -a :列出系统内所有资源的限制情况;里面的open files 为当前进程可打开的文件上限,当然我们可以人为给定值,命令 ulimit -n 100 :将当前进程可打开的文件上限改为100;命令cat /proc/sys/fs/file-max:该系统可打开的文件上限。每个进程运行时,系统默认打开0,1,2文件描述符指向的文件。案例:本来系统默认在一个进程可打开文件数量不原创 2018-04-12 18:38:49 · 512 阅读 · 0 评论 -
关于dup改变文件描述符(输出重定向)
函数dup,接收一个旧的文件描述符,返回一个新的文件描述符(最小的未被分配的文件描述符)什么是文件描述符?当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。案例:将本来输出到屏幕上的内容,重定向到某一个文件中代码:1 #include 2原创 2018-04-12 16:54:07 · 487 阅读 · 0 评论 -
关于消息队列
消息队列提供了从一个进程向另外一个进程发送一块数据的方法,每个数据块认为有一个类型(通俗说法是一个通道),但是接受通道与发送通道必须一致才能实现通信。消息队列的不足之处在于每个消息最大长度有限度,每个消息队列总字节数有限制,系统的消息队列有限制。命令:cat /proc/sys/kernel/msgmax :查看一条信息最大有多大cat /proc/sys/kernel/msgmn原创 2018-04-22 10:34:20 · 755 阅读 · 0 评论 -
关于命名管道的小案例
1. 命名管道创建命名管道创建方式:函数:mkfifo(“my.p”,0644)命令:mkfifo my.p命名管道作用:在内核中建一块缓冲区,并命名,使得2个没有亲缘关系的进程能够实现通信,通过open这块缓冲区往里面写东西,读东西。一旦这2个进程能够找到了这块共有的缓冲区,可以删除my.p这个文件,删除之后并不影响2个进程的通信。需要注意的是:当只有进程往这块缓存写东西时(原创 2018-04-22 10:21:00 · 341 阅读 · 0 评论 -
许多客户端与服务器端通信的小案例
案例:用消息队列实现许多客户端和服务器端的通信,要求是,许多客户端都可以向服务器端发送消息,服务器端在接受这些消息之后,再将消息回发给对应的客户端。解决思路:所有客户端都往1号通道上发送消息,并且在发送的内容的最前面放上自己进程的进程号,那么当服务器端收到中众多客户端发来的消息之后,通过解析主要内容的最前面内容,拿出对应客户端进程号,将其作为发送通道发送给对应的客户端,那么客户端接受的消息就来原创 2018-04-22 10:14:15 · 581 阅读 · 1 评论 -
共享内存实现消息队列
该小项目有四个文件(1)shmfifo.h(2)shmfifo.c(3)put.c(4)get.c(1)shmfifo.h 2 #ifndef __SHMFIFO_H__ 3 #define __SHMFIFO_H__ 4 5 #include 6 #include 7 #include 8 #include 9 #inc原创 2018-04-26 10:39:26 · 3242 阅读 · 1 评论 -
linux中的信号
1.什么是信号 信号是一种实现进程间异步的通知机制,用来提醒进程一个事件已经发生。 linux系统响应某些状况而产生的事件,进程在接受到信号会采取相应的动作。2.查看所有信号命令 kill -l3.信号处理方式 (1)忽略 (2)捕获并处理(自定义处理函数) (3)缺省处理(默认处理) 需要注意的是,9号SIGKILL,19号SIGSTOP信号不能忽略、不可捕获处理。4.注...原创 2018-05-12 11:16:44 · 252 阅读 · 0 评论 -
乐观锁与悲观锁
一:悲观锁 悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争夺,有争夺就会有输赢,输者等待。 syncrhoized是一种独占锁,即:占用该锁的线程才可以执行,申请该锁的线程就只能挂起等待,直到占用锁的线程释放锁才唤醒,拿到锁并执行。由于在进程挂起和恢复执行过程中存在着很大的开销,并且当一个线程正在等待锁时,它不能做原创 2018-05-06 10:14:42 · 141 阅读 · 0 评论 -
linux下的0号进程和1号进程
系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构模型。整个linux系统的所有进程也是一个树形结 构。树根是系统自动构造的,即在内核态下执行的0号进程,它是所有进程的祖先。由0号进程创建1号进程(内核态),1号负责执行内核的部分初始化工作及进 行系统配置,并创建若干个用于高速缓存和虚拟主存管理的内核线程。随后,1号进程调用execv...原创 2019-06-21 16:13:20 · 1569 阅读 · 0 评论 -
uname -a命令
uname -a:用于显示系统信息。$ uname -aLinux ubuntu3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386GNU/Linux具体如下:$ uname --helpUsage: uname[OPTION]...Print certain s...原创 2019-06-20 23:18:30 · 14706 阅读 · 0 评论 -
linux下的5种IO模型
Linux高级IO五种IO模型 阻塞IO:内核在准备好数据之前,系统调用会一直等待,直到内核准备好数据,再将数据报从内核拷贝到用户空间,系统调用 才会成功返回。所有的套接字默认都是阻塞方式,如:recvfrom /sendto 非阻塞IO:若内核未准备好数据,系统调用会直接返回,并返回EWOULDBLOCK错误码。这就需要程序员反复尝试读写文件描述符,也称这种方式为“轮询...原创 2019-06-14 15:25:13 · 195 阅读 · 0 评论 -
linux下查找占用某端口号的进程
两种方法:1、lsof -i:端口号 ls open file -i:端口号2、netstat -tunlp|grep 端口号 tcp/udp/显示数字/list/进程原创 2019-05-19 20:06:48 · 2176 阅读 · 0 评论 -
动态库与静态库
什么是库?库是编译好的一些目标代码的打包文件。动态库与静态库的概念?静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中,对应的链接方式称为静态链接。试想一下,静态库与汇编生成的目标文件(.o文件)一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj文件)的归档集合,即很多目标文件经过压缩打包后...原创 2019-04-08 11:32:41 · 216 阅读 · 0 评论 -
linux下的free命令
free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。如果加上 -h 选项,输出的结果会友好很多:有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:$ free -h -s 3上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。由于 free 命令本身比较简单,所以本文的重...转载 2019-03-28 21:38:13 · 284 阅读 · 0 评论 -
linux下的top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。终端输top命令后:系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。(1)显示了系统的进程总数,后面是相应的状态下的进程这里是:一共134个进程,1个是running状态,133个sleeping状态,0个stopp...原创 2019-03-28 21:19:15 · 773 阅读 · 0 评论 -
linux根目录下各个子目录及其含义
linux根目录下各个子目录及其含义?原创 2019-04-05 10:14:15 · 380 阅读 · 0 评论 -
linux下可以创建多少的进程?多少个线程?
linux下可以创建多少的进程?多少个线程?进程是CPU分配资源的基本单位,是程序运行的实例;线程是程序执行的最小单元,是进程中的一个实体用来执行程序,一个进程中有多个线程。一个系统中的进程数量肯定是有上限的,不然系统资源就会不够用了,同样的道理,一个进程中的线程资源也是有上限的。那进程和线程的上限到底是多大呢?Linux中最多可以有多少个进程?Linux中有一个命令可以帮...原创 2019-03-23 21:22:10 · 4175 阅读 · 1 评论 -
在mian函数命令行参数下,读取文件1,写入到文件2中,练习使用open函数
在mian函数命令行参数下,读取文件1,写入到文件2中,练习使用open函数,在此过程中,我们练习使用了函数open,read,write;分别为打开文件、读文件、写文件。代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <fcntl.h> 4 #include <memory...原创 2018-04-12 16:13:35 · 834 阅读 · 0 评论 -
自主实现一个词典
实现一个词典大致分为以下一个步骤:(1)准备好一个文档,里面有对应的单词对照表(并且有序,因为要使用二分查找)。(2)定义一条单词(英文,汉语,词性)的数据结构,在定义数据结构数组(因为有许多条单词)(3)加载(即把文档里的每条单词,读取到定义好的数据结构数组中)(4)查找,并且返回代码如下: 1 #include 2 #include 3 #include原创 2018-04-10 17:40:41 · 392 阅读 · 0 评论 -
静态库与动态库
1.什么是库:通俗的说,库就是把常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用,这样就大大提高了程序员编写代码的效率。库大体上可以分为两类:静态库和动态库(共享库)。在windows中静态库是以 .lib 为后缀的文件,共享库是以 .dll 为后缀的文件。在linux中静态库是以 .a 为后缀的文件,共享库是以 .so为后缀的文件。2.案例:main.c文件中调用了a原创 2018-04-15 10:21:30 · 138 阅读 · 0 评论 -
linux下重要命令集
linux下,一些重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password 分别有什么功能?以及各自的用法?(1) du,查看文件、目录磁盘使用情况语法:du [选项][文件/目录]选项:-a或-all显示目录中个别文件的大小。-b或-bytes显示目录或文件大小时,以原创 2018-03-24 17:55:55 · 326 阅读 · 0 评论 -
Linux下的重要目录
问题:Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp 分别是干什么的?答:(1)/proc,这个目录中的数据都在内存中,如系统核心、外部设备、网络状态,由于数据都放在内存中,所以不占用磁盘空间,在该目录下,比较重要的目录有: /proc/cpuinfo、/proc/interrupts、/原创 2018-03-24 17:49:17 · 152 阅读 · 0 评论 -
Linux中,进入目录需要哪些权限, 在目录中执行增删查改文件动作, 需要哪些权限.
linux中,对一个文件、目录操作权限有:读(r)权限、写(w)权限、执行(x)权限,而操作这些文件以及目录的用户有三类:拥有者(u)、所属组(g)、其他人(o). 问题:进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限. 答: (1)对于拥有者,进入一个目录,必须有执行(x)权限。进入目录并且在目录中tou原创 2018-03-24 17:45:47 · 244 阅读 · 0 评论 -
windows下的可执行程序可以再linux下运行吗?
windows下的可执行程序可以再linux下运行吗?答案:不能原因有以下:(1)可执行的二进制文件包含了:机器指令、数据资源、程序运行资源(物理的和虚拟的内存空间、进程、线程资源等)。因此说明了,可执行文件执行之前,操作系统要做一些准备工作,根据不同的操作系统,准备工作是不同的,因此可执行文件的格式是不相同的。Windows下可执行文件格式为PE格式,linux下可执行文件为el原创 2018-03-20 09:01:54 · 10084 阅读 · 0 评论 -
打印一个菱形
题目:在屏幕上打印一个菱形分析:我们可以认为一个菱形是由4条直线组成,分别是:y=x+r,y=x-r,y=-x+r,y=-x+3*r,如图:代码实现: 1 #include 2 int main() 3 { 4 int r=0; 5 scanf("%d",&r); 6 int x,y; 7 for(x=0;x<原创 2018-03-19 21:32:43 · 194 阅读 · 0 评论 -
程序执行过程
程序的执行过程大致分为以下四的步骤:(1)预处理(2)编译(3)汇编(4)链接1.关于预处理:预处理阶段的工作基本上是对源程序做“替代”,主要有:宏替换、条件编译、头文件展开、去除注释;经过这番替换之后,就会生成一个没有宏定义,没有条件编译、没有特殊符号的输出文件。2.关于编译:编译阶段的工作就是,将上一步预处理后的输出文件,即只有常量、变量、以及程序语言的关键字的文件,进行词法分析、语法分析、语...原创 2018-03-19 20:22:52 · 2216 阅读 · 0 评论 -
xshell中配置vim常用的功能(设置行号等)
第一步:在xshell写命令 vim ~/.vimrc,打开vimrc文件,将所要设置的功能写在里面具体为下一步。第二步:在打开的vimrc文件写:color asmanian2 " 设置背景主题 syntax on " 语法高亮 set showcmd " 输入的命令显示出来,看的清楚些 set nu "设置行号原创 2018-03-19 11:32:47 · 7218 阅读 · 0 评论 -
linux中的task_struct结构体
Linux中task_struct:主要用来管理进程:struct task_struct { //说明了该进程是否可以执行,还是可中断等信息 volatile long state; //Flage 是进程号,在调用fork()时给出 unsigned long flags; //进程上是否有待处理的信号 int sigpending;原创 2017-04-11 10:46:25 · 428 阅读 · 0 评论 -
linux目录权限
linux下不同情况下目录权限:1.要进入一个目录,目录的拥有者至少需要什么权限?我们依次试验(1)只有读权限,无法进(2)只有写权限,无法进(3)有读写权限,无法进(4)有执行权限,可以进2.进入一个目录之后,要在目录下创建一个文件,并且把这个文件显示在显示器上,至少需要什么权限?我们依次试验(1)只有执行权限,即仅仅能进来,不能创建原创 2017-03-22 12:45:19 · 361 阅读 · 0 评论 -
Linux下使用命令安装gcc/g++, gdb, vim
如何使用命令安装gcc/g++, gdb, vim ?答:Yum -y install gdbYum -y install vimYum -y install gcc/g++原创 2018-03-24 17:57:34 · 207 阅读 · 0 评论 -
linux中的几种文件类型
Linux下,不以文件后缀为区分文件类型,而是可以通过命令ls -l 文件名 查看。Linux下,文件的分类以及对应标识如下:文件分类: 1)普通文件( 数据文件 )标识:- ,普通文件是用于存放数据、程序等信息的文件,一般都长期地存放在外存储器(磁盘)中。普通文件又分为文本文件和二进制文件。 2)目录文件标识:d ,目录文件是文件系统中一个目录所包含的原创 2018-03-24 18:01:27 · 10565 阅读 · 0 评论 -
linux下的task_struct,即windows下的PCB
问题:什么是task_struct?Linux下的task_struct结构体就是windows下的进程控制块PCB.它用来管理管理进程、描述进程,它包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sched.h文件中task_struct结构体包含的信息成员有:1.进程状态,记录进程在等待,运行,或死锁 2.调度信息,由哪个调度函数原创 2018-03-25 09:07:39 · 381 阅读 · 0 评论 -
修改进程优先级(实验linux命令)
Linux下,关于进程优先级及其修改问题: Ps -el:显示系统所有进程UID(进程拥有者),PID(进程标识符),PPID(父进程标识符),PRI(进程优先级),NI(优先级调整因子)调整因子NI取值(-20到19),真正的优先级为PRI=PRT+NI,最终的优先级取决于PRT值,其值越大,其优先级越小。Ps -el | grep a.out | grep -v grep:查看我们原创 2018-03-26 20:54:40 · 3793 阅读 · 0 评论 -
带缓冲与不带缓冲的I/O操作
linux对IO文件的操作分为:不带缓存的IO操作和标准IO操作(即带缓存) 1:不带缓存,不是说直接对磁盘文件进行读取操作,而是像read()和write()函数,它们都属于系统调用,只不过在用户层没有缓存,所以叫做无缓存IO,但对于内核来说,还是进行了缓存,只是用户层看不到罢了。 2:带不带缓存是相对来说的,如果你要写入数据到文件上时(就是写入磁盘上),内核先将数据写入到原创 2018-04-09 11:04:26 · 372 阅读 · 0 评论 -
C语言的fopen函数
C语言的fopen函数。函数原型:FILE* fopen(const char* path, const char* mode)功能:用于打开文件参数:const char* path:字符串类型,文件所在的路径,包括文件名 Const char* mode:打开方式 关于打开方式:(1)r以只读的方式打开,该文件必须存在(2)r+以可读、可写的方式原创 2018-04-09 10:38:17 · 1311 阅读 · 0 评论