- 博客(17)
- 收藏
- 关注
原创 使用epoll编写服务器
epoll是公认的linux2.6下性能最好的多路I/O就绪通知方法。epoll有epoll_create,epoll_ctl,epoll_wait三个系统调用。1.int epoll_create(int size):创建一个epoll句柄。当创建好句柄后,他会占用一个fd的值,所以当使用完epoll后一定要调用close将其关闭。2.int epoll_ctl(int epfd,i
2016-09-26 22:54:17 2194
原创 使用select编写服务器
io多路复用是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般都是读就绪或者写就绪),就能通知应用程序进行相应的读写操作。select函数作为io多路复用的机制,第一个参数nfds是fd_set集合中最大描述符值+1,fdset是一个位数组,每一位代表其对应的描述符是否需要被检查。第二三四参数表示需要关注读、写、错误时间的文件描述符位数组,这些参数既是输入型参数也是输出型参数,可能会被内
2016-09-24 23:41:16 1137
原创 IP数据报的分片与重组
IP数据报格式:在IP数据报头中有三个字段与数据报的分片与重组有很大的关系,分别是标识符、标志和片偏移量。1.其中标志占3位,该字段目前只有后两位有意义。其中,最低位记为MF(More Fragment),用于把数据报最后一片与前面其它各片区分开来。MF = 1代表片未完,即钙片不是原始数据报的最后一片;MF = 0表示钙片是原始数据报的最后一片。次低位DF(Don't Fra
2016-09-20 22:55:18 13660 2
转载 队列实现生产者消费者模型
生产者/消费者问题是并发处理中遇到的最常见的问题,通常可描述如下:有一个或多个生产者生产某种类型的数据(记录,字符),并放置在缓冲区中;有一个消费者从缓冲区中取数据,每次取一项;系统保证避免对缓冲区的重复操作,也就是说,在任何时候只有一个主体(生产者或消费者)可以访问缓冲区。问题是要确保这样的情况,当缓冲区已满时,生产者不会继续向其中添加数据;当缓冲区为空时,消费者不会从中移走数据。若缓冲区是
2016-09-19 12:29:47 903
原创 生产者消费者问题
生产者/消费者问题是并发处理中遇到的最常见的问题,通常可描述如下:有一个或多个生产者生产某种类型的数据(记录,字符),并放置在缓冲区中;有一个消费者从缓冲区中取数据,每次取一项;系统保证避免对缓冲区的重复操作,也就是说,在任何时候只有一个主体(生产者或消费者)可以访问缓冲区。问题是要确保这样的情况,当缓冲区已满时,生产者不会继续向其中添加数据;当缓冲区为空时,消费者不会从中移走数据。假设缓冲区
2016-09-16 15:26:55 424
原创 linux中的死锁
死锁:是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于“死锁”状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。由于资源占用时互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必备的资源而无法运行,这就产生了一种特殊现象死锁。一种交叉等待死锁的情形,此
2016-09-10 20:46:23 1026
原创 linux中的crontab命令
在linux中,使用者可以自己设置计划任务,所以系统提供了使用者控制计划任务的命令:crontab。1.在用户建立的crontab文件中,每行代表一个任务,每行的每隔字段代表一项设置,共分为6个字段,前五个设置时间,最后一个设置命令;Min:分钟,0-59Hour:小时,0-23Day:日期,0-31Month:月,1-12Week:周,0-7可以使用以下特殊字
2016-09-10 00:16:13 253
转载 linux中可重入函数和线程安全
一个可重入函数简单来说是可以被中断的函数,也就是说,可以在这个函数运行的任何时候中断它,转入os调度下去执行另一段代码,而返回控制时不会出现什么错误。可以被信号控制器安全调用的函数称为“异步信号安全函数”。可重入函数与异步信号安全函数时一个概念。线程安全:一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,他会产生一个正确的结果。可重入性:有一类重要的线程安全函数,叫做
2016-09-07 22:55:16 379
原创 linux进程间通信(命名管道)
在处理进程间通信的问题时,匿名管道只能在有亲缘关系的进程中进行通信。如何做到在任意两个进程之间通信,这就要用到命名管道。命名管道也被称为fifo文件,它是一种特殊类型的文件,在文件系统中以文件的形式存在,它的行为和匿名管道类似。可以使用mkfifo函数来创建一个命名管道。int mkfifo(const char* filename,mode_t mode);filename指定了文件
2016-09-02 21:22:34 299
原创 linux中使用匿名管道实现进程间通信
管道是最基本的IPC机制,由pipe函数创建。在调用pipe函数时,会在内存中创建一个缓冲区,称为管道。这个管道有两个端,一个读端和一个写端。通过filedes参数传给用户程序的两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端。在linux中一切皆文件,管道可以看成是一个文件,可以通过read和write函数对管道进行读写操作。进程间通信时如何通过匿名管道
2016-09-02 19:18:25 1332
原创 linux中的umask
当我们登陆一个系统后创建一个文件和目录都是有默认权限的,umask设置了创建文件和目录的默认权限,它与chomd效果相反,umask设置权限的补码,chmod设置文件的权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。umask中文名:掩码;
2016-08-31 14:21:11 519
转载 struct FILE
struct file struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或f
2016-08-27 22:46:56 472
原创 vfork函数创建出的父子进程
vfork函数创建新进程的主要目的在于用exec函数执行另外的程序。在没调用exec或exit之前子进程的运行中是与父进程共享数据段的,在vfork调用中,子进程先运行,父进程挂起,直到子进程调用exec或exit,在这之后,父子进程的执行顺序不在有限制。例: 1 #include 2 #include 3 #include 4 #include 5 6
2016-08-27 19:08:53 2695
原创 linux中c程序的栈帧
栈帧和指针式c语言的精髓。栈帧是一种特殊的数据结构,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址,栈帧位于栈内存中,从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器eb
2016-08-27 00:20:57 770
转载 task_struct结构
struct task_struct {volatile long state; //说明了该进程是否可以执行,还是可中断等信息unsigned long flags; //Flage 是进程号,在调用fork()时给出int sigpending; //进程上是否有待处理的信号mm_segment_t addr_limit; //进程地址空间,区分内核进程与普通
2016-08-25 22:50:01 273
原创 linux中find命令的用法
find命令是比较常用的命令,用来在特定目录下查找具有某种特征的文件。一:find命令格式如下:find [-path......] -options [-print -exec -ok]path:要查找的目录路径(“~”表示$home目录;“.”表示当前目录;“/”表示根目录)。print:将结果输出到标准输出。exec:对匹配的文件执行该参数所给出的shell命令,形式为:
2016-08-24 09:44:46 32349
原创 linux下文件的三个时间(Atime ,Mtime,Ctime)
在windows系统中创建文件会保存文件有关的三个时间,分别是创建时间,修改时间,访问时间。在linux中式怎样的呢?我们在linux中新建一个文件,用stat命令查看文件信息:系统保存了这三个时间,分别是Access time(访问时间),Modify time(修改时间)和Change time(状态时间)。linux中文件没有创建时间,当文件创建时这三个时间是
2016-08-22 11:19:26 667
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人