![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 74
成长的菜鸟1018号
菜鸟一枚,希望早日脱离菜鸟
展开
-
centOS6.5 配置vim
1.在你的工作目录下(ls -a)查看有没有 .vimrc 文件 没有新建一个 下载配置内容: http://www.linuxidc.com/files/2016/05/vim/vimrc.zip 将其.vimrc 放在 工作目录下2 下载并安装Taglist点击下载插件:http://www.vim.org/scripts/script.php?script原创 2017-02-15 20:57:10 · 1841 阅读 · 1 评论 -
【Linux】重定向函数dup/dup2
有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。dup()与dup2()能对输入文件描述符进行重定向。函数描述函数声明 返回值: 可能有点绕,解释一下 dup和dup2函数都是调用是文件描述符oldfd的副本(新创建的)。 dup函数:dup()使用最小的未使用的描述符来描述新的描述符dup函数测试:以输出重定向为例#include<stdio.h>#inc原创 2017-06-05 21:08:50 · 1446 阅读 · 0 评论 -
【Linux】I/O多路转接select
系统提供select函数来实现多路复用输入/输出模型,那为什么提供select函数?select高效的原因首先要知道一个概念,一次I/O分两个部分(①等待数据就绪 ②进行I/O),减少等待数据的的比重,增加I/O的比重就可以达到高效服务器的目的。 select工作原理就是减少等的比重,同时监控多个文件描述符(或者说文件句柄),一旦其中某一个进入就绪状态,就进行I/O操作。监控多个文件句柄可以达到提原创 2017-06-05 22:03:30 · 484 阅读 · 0 评论 -
在Linux下编写一个进度条的小程序:C和shell
写一个简单的进度条了解三个方面的知识:进度条的实现原理,Linux下的回车,以及缓冲区(1)进度条的实现原理:定义一个102的字符数组bar[102],首先第一个位置bar[0] ='\0',在while循环中:每次更新从0的位置开始写入n 个‘*’(每次从开始位置写入 涉及到回车问题),更新到100结束,n来控制进度条的进度或者写入多少个*。(2)Linux下的回车问题:Unix 系原创 2017-02-17 13:35:25 · 1646 阅读 · 0 评论 -
【Linux】I/O多路转接poll
不同与select使用三个位图来表示三个fdset的方式,poll使用⼀一个 pollfd的指针实现。poll函数 poll函数和select函数的任务相似:等待一组文件描述符来准备执行I/0。原创 2017-06-11 14:05:02 · 382 阅读 · 0 评论 -
【Linux】I/O多路转接epoll
epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次epoll函数epoll的三个操作函数:int epoll_create(int size);//创建一个epoll原创 2017-06-11 15:21:00 · 342 阅读 · 0 评论 -
【Linux】shell脚本下的命令代换` `和$() 以及eval
命令代换命令替换(command substitution)是指 Shell 执行命令并将命令替换部分替换为执行该命令后的结果。 命令代换有两种方式: command 和 $(command)command 注意是:反引号 (在!左边的那个)既然两种方式都可以用来命令替换,那他们肯定存在不同之处 (1)反引号容易与单引号混淆 (2)反引号执行命令替换时,会对其中的command命令中包含原创 2017-06-15 16:29:56 · 587 阅读 · 0 评论 -
【Linux】fork函数的理解
fork函数总结先说下fork函数 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果父进程继续创建更多的子进程,子进程之间是兄弟关系,同样子进程也可原创 2017-07-16 18:31:27 · 607 阅读 · 0 评论 -
【库连接问题】makefile中如何连接库以及解决/usr/bin/ld: skipping incompatible问题
关于如何连接库,这里只记录自己碰到的一些问题编写Makefile编译时 -c 生成.o 文件:后面要加-I (指明包含的头文件)链接时 -o 生成可执行文件:-L(指明库的位置) -l(指明库的名字)还有一个是在引用json库的问题: lib文件下有两个文件夹 include和 lib文件夹 include 文件夹中有一个文件夹json,里面又包含着json的头文件 lib文件中放着libjs原创 2017-07-20 16:06:55 · 26031 阅读 · 4 评论 -
【Linux】Linux下c++使用Json库
安装Json库1、下载Jsoncpphttps://sourceforge.net/projects/jsoncpp/files/2、下载scons https://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download3、解压scons-2.1.0.tar.gztar -zvxf scons-2.原创 2017-07-20 21:38:42 · 1856 阅读 · 0 评论 -
【Linux】crond机制以及cronttab命令
Linux中有一个命令可以定期来执行系统任务,这就是crond服务。Linux也提供用户控制例行性工作调度的命令(crontab)。可以用一下命令来控制crond服务 service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service cron原创 2017-07-08 22:33:53 · 3259 阅读 · 0 评论 -
【Linux】正则表达式
正则表达式是处理字符串的一种表示方法,分为基准正则表达式 和扩展正则表达式。注:是grep正则表达式的Extended规范,Basic规范也有这些语法,只是字符?+{}|()应解释 为普通字符,要表示上述特殊含义则需要加\转义。如果用grep而不是egrep,并且不加-E参数,则 应该遵照Basic 规范来写正则表达式。 (一定要注意!!!!!) 注意: 正则表达式参数用单引号括起来了,因为正则表达原创 2017-07-09 16:02:45 · 525 阅读 · 0 评论 -
网络群聊系统
1、网络群聊系统简介简单来说,这个聊天系统是参照《Linux高性能服务器编程》中有个简单的聊天系统实现的群聊功能。服务器端负责接收客户端的消息,放到数据池中,还负责从数据池中取出数据转发给在线的客户端;每个客户端负责发送和接收数据,还负责数据的序列化和反序列化。2、网络群聊系统背景知识(1)在Linux操作系统下实现,本人用的是CentOS 6.5 (2)熟悉Linux的开发环境,使用vim,g+原创 2017-07-24 17:29:34 · 4871 阅读 · 8 评论 -
TinyHttpd----超轻量型Http Server源码分析
tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。下载链接:http://sourceforge.net/projects/tinyhttpd/分析这段源码前,需要对网络协议,Linux编程,以及HTTP有一定的了解,这里假设大家对http有一定的了解,如原创 2017-07-08 12:19:40 · 2846 阅读 · 1 评论 -
【操作系统】页面置换算法
1、页面置换算法是干嘛的虚拟页式存储管理的基本工作原理:在进程运行之前,不是装入全部页面,而是装入全部页面,而是装入一个或零个页面,之后根据进程运行的需要,动态装入其他页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。在使用虚拟页式存储管理时需要在页表中增加一些内容,得到页表的内容如下: 页号、驻留位、内存块号、外存地址、访问位、修改位 其中驻留位,又称原创 2017-08-19 21:40:48 · 10467 阅读 · 2 评论 -
基于多线程Http服务器的查询天气
1、项目简介前段时间阅读了源码tinyHttpd, TinyHttpd—-超轻量型Http Server源码分析 然后基于这个实现一个查询天气的功能,以及该服务器能够连接数据库的功能。2、项目的背景知识(1)该项目在Linux系统下开发的,熟悉Linux的开发环境。 (2)熟悉掌握多线程编程 (3) 熟悉掌握网络协议中的HTTP以及网络编程 (4) 熟悉mysql的基本命令 (5)了解my原创 2017-07-24 22:06:19 · 652 阅读 · 1 评论 -
Shell--字符串
好久没有用shell脚本,这节总结一些字符串的相关知识,字符串是Shell脚本最常用的数据类型。单引号 双引号 反引号的区别单引号1、单引号会忽略所有的特殊字符,即任何字符都会原样输出,包括定义的变量 2、单引号字串中不能出现单引号双引号 1、双引号对字符串中出现的$、”、`和\进行替换,其他字符原样输出; 2、双引号可以出现反引号,转义字符反引号1、反引号有命令替换的...原创 2018-07-14 21:32:45 · 5407 阅读 · 1 评论 -
Linux下C实现线程池
线程池的背景在传统服务器结构中, 常是有一个总的监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程池提供了一个解决外部大量转载 2017-06-01 12:24:48 · 862 阅读 · 0 评论 -
【Linux】守护进程以及实现一个守护进程
1、什么是守护进程守护进程也称为精灵进程,是运行在后台进程的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 (1)脱离于控制终端并且在后台运行 (2)不受用户登录注销的影响,它们一直在运行着 Linux大多数服务器就是用守护进程实现的,例如:Internet服务器inetd,Web服务器httpd查看系统中的守护进程:使用命令 ps axj 凡是TPGID一原创 2017-05-10 16:56:09 · 3542 阅读 · 0 评论 -
【Linux】线程安全以及可重入函数
可重入函数&emsp函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入。 &emsp当程序运行到某一个函数的时候,可能因为硬件中断或者异常而使得在用户正在执行的代码暂时终端转而进入你内核,这个时候如有一个信号需要被处理,而处理的这个信号的时候又会重新调用刚才中断的函数,如果函数内部有一个全局变量需要被操作,那么,当信号处理完成之后重新返回用户态恢复中断函数的上下文原创 2017-05-01 17:35:49 · 1668 阅读 · 0 评论 -
Linux下PCB的task_struck结构体
在linux中,把每一个进程的基本信息抽象成一个结构体,这就是task_struct结构体,在include\linux\sched.h文件中定义。 一说到进程,就要想到task_struct结构体。每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息。在任何时候,操作系统都能跟踪这个结构的信息。struct task_struct {TA原创 2017-02-17 22:26:49 · 840 阅读 · 0 评论 -
操作系统的进程调度算法
调度也称dispatcher 这是内核的主要职责之一就是决定该轮到哪个任务运行了多数实时内核是基于优先级调度算法的每个任务根据其重要程度的不同被赋予一定的优先级基于优先级的调度法指CPU 总是让处在就绪态的优先级最高的任务先运行然而究竟何时让高优先级任务掌握CPU 的使用权有两种不同的情况这要看用的是什么类型的内核是非占先式还是占先式的内核,一个良好的任务调度算法应该主要体现在以下几个方面原创 2017-02-18 20:50:45 · 764 阅读 · 0 评论 -
exit()函数,_exit()函数,_EXIT()函数 和atexit函数
(1)exit() _exit() _Exit() #include : void exit( int status ); void _Exit( int status ); #include : void _exit( int status );在图1中可以看出:这三个函数⽤用于正常终⽌止⼀一个程序,_exit和_Exit⽴立即进⼊入内核,而exit则原创 2017-02-19 19:06:30 · 786 阅读 · 0 评论 -
Linux下的特殊权限s t i a
Linux下的文件权限除了r w x,还有 s t i a。本篇文章主要描述 s t 这两个权限,i a 权限大概描述下权限s:只能应用在可执行程序上,允许任意⽤用户或用户组在执⾏文件时以文件拥有者的⾝身份执⾏,文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(c h m o d命令原创 2017-02-19 20:05:51 · 512 阅读 · 0 评论 -
Linux下的FILE结构体
struct file结构体定义在/linux/include/linux/fs.h(Linux 2.6.11内核)中,其原型是:struct file { /* * fu_list becomes invalid after file_free is called and queued via * fu_rcuhead for RCU fr原创 2017-02-19 20:34:26 · 3058 阅读 · 0 评论 -
编写一个简单的shell
编写一个简单的shell:今天只是写个框架,后面会完善shell ,注:暂且不支持内建命令,不支持重定向,不支持管道 先介绍一下shell:Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,是操作系统的外壳程序,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核心为每个终端用户建立原创 2017-02-28 17:24:01 · 10099 阅读 · 0 评论 -
验证管道的容量以及管道的组织形式
注: 本人使用的Linux的内核版本:1 查看并验证系统管道的容量 通过ulimit -a命令查看自己系统下的管道容量 一次原子写入为512bytes*8=4096bytes 查看缓存条目个数命令:cat /usr/src/kernels/2.6.32-431.el6.i686/include/linux/pipe_fs_i.h 所以:pipe的容量:51原创 2017-02-28 19:52:56 · 466 阅读 · 0 评论 -
简述find 命令
linux 的find命令原创 2016-07-14 17:39:27 · 1223 阅读 · 0 评论 -
简述Linux下stat查看文件的三个时间点
stat命令查看文件的信息:stat查看文件信息的三个时间点(1)Access:文件访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more,cat,less, head,tail命令。ls、stat命令都不会修改文件的访问时间。ls -ul显示的文件最后访问时间。(2)Modify:文件修改时间,文件内容修改一次,这个时间就会更新。比如对这个文件使用vim命令原创 2017-02-14 20:26:12 · 1430 阅读 · 0 评论 -
简述Linux系统与内核是如何构成的以及 linux内核是如何构成的
Linux系统与内核是如何构成的 从图上我们可以知道,Linux系统是由用户空间和内核空间两部分组成。Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G的空间划分为两部分:内核空间 最高的1G(0xC0000000~0xFFFFFFFF),供内核使用。用户空间 将较低的3G字(0x0000000原创 2017-03-09 22:51:39 · 1883 阅读 · 0 评论 -
Linux下IPC主题一————消息队列
一 什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先⼊入先出。消息队列与命名管道有一样的不足,就是每个消息的最⼤大长度是有上限的(MSG原创 2017-02-27 19:05:42 · 500 阅读 · 0 评论 -
Linux下IPC主题二-------------信号量
一、什么是信号量信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能,保护临界资源。二 为什么使用信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线原创 2017-03-10 17:36:11 · 319 阅读 · 0 评论 -
线程间同步与互斥:生产者消费者问题
总结一下线程间同步与互斥生 产者消费者问题1互斥锁(mutex)对于多线程的程序,访问冲突的问题是很普遍的,解决的办法是引⼊入互斥锁(Mutex,MutualExclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得锁的线程只能等待⽽而不能访问共享数据,这样“读-修改-写”三步操作组成一个原⼦子操作,要么都执⾏行,要么都不执⾏行,不会执⾏行到原创 2017-03-30 21:45:11 · 1727 阅读 · 0 评论 -
操作系统之死锁的相关概念
一、什么是死锁?死锁是在多道程序系统中,一组进程中的每一个进程均无限期地等待该组进程中的另一个进程所占有并且永远不会释放的资源。二 、死锁产生的原因:①竞争资源,系统提供的资源数量有限,不能满足每个进程的需求, 如磁带机、打印机等。只有对不可剥夺资源的竞争 才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。②多道程序运行时,进程推进顺序不合理。例如,并发进程 P1原创 2017-03-30 22:07:49 · 771 阅读 · 0 评论 -
Linux下IPC主题三----------------共享内存
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以,共享内存本身并不提供。共享内存为什么效率高:因为不像管道以及消息队列一样,读写时进行拷贝两次,而共享内存直接进行原创 2017-03-15 20:30:58 · 477 阅读 · 0 评论 -
【Linux】模拟实现sleep函数
模拟实现实现sleep函数首先来了解什么是sleep以及它的工作原理使用命令 man 3 sleep 查看下系统是怎么介绍sleep函数的 函数原型:当前进程挂起指定时间后继续运行 描述: sleep()函数时用来使进程睡眠直到时间seconds到了或者一个信号(6号信号)到达且没有被忽略。 返回值: 请求的时间到了就返回0,有剩余时间就返回剩余的时间数。 注意: sleep函数有原创 2017-05-01 11:31:43 · 2103 阅读 · 0 评论 -
Linux的crontab简单使用
Linux下的crontab命令:可以用来定时的去跑一些脚本或者程序crontab的命令crontab [-u user] file crontab [-u user] [ -e | -l | -r ]-u user:用来指定某个用户file:file 是你编写的crontab的任务列表。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入...原创 2018-09-23 17:08:06 · 2299 阅读 · 2 评论