linux学习笔记
文章平均质量分 66
DaveLee001
科学付出,才能高效
展开
-
ACL基础知识汇总
ACL(Access Control list,访问控制列表)一般用来进行流量过滤和流量分类。1.过滤就是对数据包流量进行过滤,包含了防火墙的功能(应用到三层网络层),商业级的防火墙一般都需要能应用到网络上面的应用层。过滤的两个动作:permit(允许)、deny (拒绝)ACL做过滤时都是绑定在交换机或路由器的接口(Interface)上,其中需要注意:一个接口(Interfa...原创 2020-04-20 16:15:16 · 2147 阅读 · 0 评论 -
libev入门
引言实现应用的捷径是充分利用开放源代码和开放标准等资源。为了实现视频服务器,研究了开源视频服务器DarwinStreamingServer,Reactor并发编程设计模式,同时还评估了Boost.Asio、ACE、libevent以及 libev等网络编程相关的库。得出的结论是基于DarwinStreamingServer的设计思想,采用Reactor设计模式实现一个更加高效并可扩展的视频转载 2013-11-26 13:55:27 · 2340 阅读 · 0 评论 -
linux中select()函数分析
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2014-03-04 16:52:25 · 871 阅读 · 0 评论 -
linux创建线程失败的原因是线程栈大小的设置
线程应用程序最常见导致创建线程失败的原因是线程栈大小的设置。创建一个新的线程,默认情况下系统为线程栈预留了2MB的寻址空间。线程栈起始于进程虚拟 内存的高端地址,并向虚拟内存底端地址方向扩展。取决于线程本身的大小以及其它线程内存分配的情况,进程虚拟地址空间消耗过快可能导致创建线程失败。这里有一个测试程序可以看到,Linux下最多可以创建多少个线程。#include #inc转载 2014-03-14 16:09:39 · 4244 阅读 · 0 评论 -
Socket心跳包机制
心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线;同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用。方法转载 2014-03-14 16:04:06 · 1531 阅读 · 0 评论 -
struct stat 作用
stat,lstat,fstat1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。函数原型#include int stat(const char *restrict pathname, struct stat *restrict buf);提供文件名字,获取文件对应属性。int fstat(int filedes, struct stat *buf转载 2014-03-28 14:24:44 · 659 阅读 · 0 评论 -
GDB多线程调试基本命令和实现简介以及一个常见问题的解决
先介绍一下GDB多线程调试的基本命令。info threads显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。前面有*的是当前调试的线程。thread ID切换当前调试的线程为指定ID的线程。thread apply ID1 ID2 command让一个或者多个线程执行GDB命令command。threa转载 2014-03-17 16:53:33 · 706 阅读 · 0 评论 -
一致性hash算法
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的转载 2014-03-24 15:40:21 · 581 阅读 · 0 评论 -
makefile的语法及写法
0 Makefile概述 -------------------------------------------------------------------------------- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要转载 2014-03-25 09:59:20 · 553 阅读 · 0 评论 -
makefile的语法及写法(二)
3 Makefile书写规则 -------------------------------------------------------------------------------- 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一转载 2014-03-25 10:00:54 · 607 阅读 · 0 评论 -
Linux下cfsetospeed和cfsetispeed函数
对于波特率的设置通常使用cfsetospeed和cfsetispeed函数来完成。获取波特率信息是通过cfgetispeed和 cfgetospeed函数来完成的。 cfsetospeed函数 头文件: #include 函数原型: int cfsetospeed(struct termios *termptr, speed_t speed);转载 2014-03-04 15:58:08 · 2046 阅读 · 0 评论 -
struct termios
一、数据成员termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。 这个结构包含了至少下列成员: tcflag_t c_iflag; /* 输入模式 */tcflag_t c_oflag; /* 输出模式 */tcflag_t c_cflag; /* 控制模式 */tcflag_t c_lflag; /* 本地模式 */原创 2014-03-04 16:01:29 · 693 阅读 · 0 评论 -
RTMP/RTP/RTSP/RTCP的区别
用一句简单的话总结:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码中没有看到相关的部分。而在私有RTSP的代码中,有关控制、同步等,是在RTP Header中做扩展定义实现的。另外,RFC3550可以看作是RFC1889的升级文档,只看RFC3550即转载 2013-11-14 10:27:36 · 1409 阅读 · 0 评论 -
浅谈时间函数gettimeofday的成本
我们在程序中会频繁地取当前时间,例如处理一个http请求时,两次调用gettimeofday取差值计算出处理该请求消耗了多少秒。这样的调用无处不在,所以我们有必要详细了解下,gettimeofday这个函数做了些什么?内核1ms一次的时钟中断处理真的可以支持tv_usec字段达到微秒精度吗?它的调用成本在i386/x86_64体系架构上代价一样吗?如果在系统繁忙时,频繁的调用它有问题吗?转载 2013-12-12 11:40:51 · 1003 阅读 · 0 评论 -
Linux 的僵尸(zombie)进程
可能很少有人意识到,在一个进程调用了exit之后,该进程 并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所 有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有 任何内存空间。僵尸进程的来由,要追溯到Un转载 2013-12-20 15:48:42 · 754 阅读 · 0 评论 -
fcntl函数说明
(1)fcntl函数说明前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议转载 2014-02-26 15:26:02 · 557 阅读 · 0 评论 -
makefile的语法及写法(二)
3 Makefile书写规则 -------------------------------------------------------------------------------- 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一转载 2014-02-27 17:09:46 · 721 阅读 · 0 评论 -
makefile的语法及写法(一)
0 Makefile概述 -------------------------------------------------------------------------------- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要转载 2014-02-27 17:08:43 · 602 阅读 · 0 评论 -
SVN命令总结
一、从版本库获取信息svn help command 获取子命令说明svn info $URL 查看工作空间信息 若是目录地址,查看本地目录信息,若无$DIR,默认为当前目录 若是文件地址,查看本地文件信息svn list 显示给定目录在某一版本存在的文件 svnlist 显原创 2014-02-28 18:15:08 · 28614 阅读 · 1 评论 -
pthread_once 和 pthread_key
一次性初始化 有时候我们需要对一些posix变量只进行一次初始化,如线程键(我下面会讲到)。如果我们进行多次初始化程序就会出现错误。 在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,然后将变量置为1。以后检查的代码将跳过初始化。 但是转载 2014-02-28 14:43:36 · 656 阅读 · 0 评论 -
C++中string的常用函数总结
标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据转载 2014-02-28 15:59:40 · 16971 阅读 · 1 评论 -
函数sem_wait, sem_timedwait, sem_trywait比较
#includeint sem_wait(sem_t*sem);intsem_trywait(sem_t *sem);intsem_timedwait(sem_t *sem, const struct timespec *abs_timeout);与 -lrt 或 -pthread 一起链接。glibc 需要特性测试宏(参看 feature_test_macros(7)):原创 2014-03-04 14:52:58 · 29110 阅读 · 0 评论 -
mkfs 的使用
使用方法:[root@localhost beinan]# mkfs -t 文件系统 存储设备注:这里的文件系统是要指定的,比如 ext3 ;reiserfs ;ext2 ;fat32 ;msdos 等... ...设备比如是一个硬盘的分区,软盘,光驱等.. ... 在格式化分区之前,您得懂得如何查看硬盘分区情况,并有针对性的格式化;比如用 fdisk -l 来查看; 请转载 2014-05-14 11:22:23 · 1031 阅读 · 0 评论 -
教你透彻了解红黑树
推荐阅读:Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structures, Wadern, Germany, February, 2008. 直接下载:http://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf------------------------转载 2014-06-26 10:40:09 · 614 阅读 · 0 评论 -
socket中的函数遇见EINTR的处理
这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 《unp 》,采用continue或者goto again循环解决的。但是感觉这个还是很有必要记录一下。网络上查找到的信息很多。下面是我查找到的和EINTR有关的介绍:1 http://blog.csdn.net/yanook/article/details/7226019 慢系统调用函数如何处理中断信号EINTR2转载 2015-09-10 11:41:34 · 646 阅读 · 0 评论 -
SNMP从入门到开发:基础篇 1
SNMP协议入门1、引言基于TCP/IP的网络管理包含3个组成部分:1) 一个管理信息库MIB(Management Information Base)。管理信息库包含所有代理进程的所有可被查询和修改的参数。RFC 1213[McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II。2) 关于MIB的一套公用的结构和表示符号。叫做管理信息结构SMI转载 2015-08-20 14:01:24 · 6400 阅读 · 2 评论 -
SNMP从入门到开发:进阶篇 2
管理信息库:MIB我们要扩展mib首先必须清楚mib是如何定义的,用的什么语言,有哪些约定,遵循哪些规则等等。这些基本东西掌握过后,我们就可以很轻松的来写自己的mib文件了。所谓管理信息库,或者MIB,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合,或者叫管理对象的集合,在RFC 1213 [McColghrie 和Rose 1991]中定义了MIB-II,即第二版的转载 2015-08-20 14:04:03 · 1941 阅读 · 0 评论 -
Vi/Vim查找替换使用方法
vi/vim 中可以使用 :s 命令来替换字符串。该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询。 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行转载 2015-09-15 10:41:03 · 510 阅读 · 0 评论 -
linux C语言获取系统内存信息
#include #include #include int MemInfo(char* Info, int len);int main(){ char buf[128]; memset(buf, 0, 128); MemInfo(buf, 100); printf("%s", buf); return 0;}int MemInfo(cha原创 2014-06-11 14:27:57 · 7156 阅读 · 2 评论 -
linux awk命令详解
简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创始人 Alfr转载 2015-11-12 15:51:26 · 459 阅读 · 0 评论 -
多线程编程-线程的创建和终止
1.引言: Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有转载 2015-12-02 22:51:19 · 529 阅读 · 0 评论 -
Linux内存管理之mmap详解
一. mmap系统调用1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用.转载 2016-03-01 15:43:14 · 1485 阅读 · 0 评论 -
Linux系统下scala安装详解
由于公司业务开展的原因,需要用到多维度分析,所以打算从scala开始,以后会写一系列scala的学习笔记,做一下记录,同时给他人方便。原创 2017-02-24 15:06:22 · 11372 阅读 · 0 评论 -
linux下字符串与十六进制之间的转换
#include #include #include //字符串转换成16进制inline char *CharArrayToHexString(char* pOut, const int nMaxLen, const char* pInput, const int nInLen){ const char* chHexList = "0123456789ABCDEF";原创 2015-09-10 09:47:02 · 20548 阅读 · 0 评论 -
linux 下时间字符串和time_t类型之间的相互转化
#include #include #include #include time_t ConvertStrtoTime(char * szTime){ tm tm_; time_t t_; strptime(szTime, "%Y-%m-%d %H:%M:%S", &tm_); //将字符串转换为tm时间 tm_.tm_isd原创 2015-09-01 15:19:36 · 9707 阅读 · 0 评论 -
poll和epoll原理对比、分析
随着2.6内核对epoll的完全支持,网络上很多的文章和示例代码都提供了这样一个信息:使用epoll代替传统的poll能给网络服务应用带来性能上的提升。但大多文章里关于性能提升的原因解释的较少,这里我将试分析一下内核(2.6.21.1)代码中poll与epoll的工作原理,然后再通过一些测试数据来对比具体效果。 POLL: 先说poll,poll或select为大原创 2014-03-05 09:53:24 · 1543 阅读 · 0 评论 -
TCP 的那些事儿(下)
这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资转载 2014-05-28 13:07:48 · 5418 阅读 · 0 评论 -
source insight的自动缩进 以及网上的一些使用技巧
让source insight的if(ddd) { }变成:if(ddd){}不过在{}中的第一行还是不能又自动缩进4个字符方法如下:options --> Document Options -->Auto IndentAuto Indent Type选择SimpleSmart Indent Options都选上转载 2014-07-22 17:56:45 · 1845 阅读 · 0 评论 -
Linux proc/%d/stat文件详解
Linux stat文件。也终于弄明白了这一堆堆砌的数字的意思。 [root@localhost ~]# cat /proc/6873/stat 6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 1345126转载 2014-07-29 10:26:01 · 2408 阅读 · 0 评论 -
Linux /proc第一篇---->/proc/pid记录了什么
由于自己Linux系统知识基础比较薄弱,准备比较全面学习,准备从/proc这个目录开始。实际上这个目录也基本上记录所有系统运行时和内核的一些信息,所以如果想对linux系统有一个比较全面的了解,从/proc入手应该是个不错的选择。准备将自己学习的过程记录下来,分享给同样需要的朋友,也便于以后查阅。今天准备介绍一下/proc/pid这个目录到底是做什么用的,它到底记录了哪些信息。转载 2014-08-04 11:40:10 · 731 阅读 · 0 评论