Linux总结
FadeFarAway
新的起点-重新开始
展开
-
(五十四)高并发服务器——多路IO转接机制poll模型
本文部分转载于: http://blog.csdn.net/wqx521/article/details/53783222 http://blog.csdn.net/orz415678659/article/details/8958415 poll提供的功能与select类似,它和select在本质上没有多大差别,但是poll没有最大文件描述符数量的限制,而且在处理流设备时转载 2017-02-03 01:25:24 · 3319 阅读 · 0 评论 -
(三十七)进程组
进程组就是一个或多个进程的集合,每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中),进程组由进程组ID来唯一标识,进程组ID是一个正整数,用来获得当前进程进程组ID的命令:$ ps -ajx显示如下:(PGID列即为进程组列) PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 1原创 2017-01-11 17:05:12 · 4189 阅读 · 0 评论 -
(十六)文件操作——chmod函数的介绍和使用
头函数: #include < sys/stat.h> 函数定义: int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode); 函数说明: chmod()会依参数mode 权限来更改参数path 指定文件的权限。 fchmod()会依参数mode 权限来更改参数fd 所指文件的权限。参数f原创 2017-01-01 19:10:27 · 9368 阅读 · 0 评论 -
(十五)文件操作——access函数的介绍和使用
头文件:#include < unistd.h> 定义函数:int access(const char * pathname, int mode); 函数说明:access()会检查是否可以读/写某一已存在的文件。参数mode 有几种情况组合: 1、R_OK, W_OK, X_OK和F_OK. R_OK, W_OK 与X_OK 用来检查文件是否具有读取写入和执行的权限。 2、F_O原创 2017-01-01 18:42:15 · 6186 阅读 · 0 评论 -
(十四)文件操作——stat命令与函数
stat命令 stat既有命令也有同名函数,用来获取文件Inode里主要信息,所以stat命令的输出信息比ls命令的输出信息要更详细,stat 跟踪符号链接,lstat不跟踪符号链接,其中会输出对应文件的文件名(File)、文件大小(Size)、占用物理扇区数(Blocks)、系统块大小(IO Block)、文件类型(前一篇博客中介绍的)、设备的主编号和次编号(Device做驱动程序时经常用到,在原创 2017-01-01 11:01:51 · 4386 阅读 · 0 评论 -
(十三)linux文件系统详解(基于ext2文件系统)
我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局: 文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为1024、2048或4096字节原创 2017-01-01 00:52:55 · 4767 阅读 · 0 评论 -
(三十六)终端
在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),在进程这一节时讲过,控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是原创 2017-01-11 13:02:51 · 4007 阅读 · 0 评论 -
(五十五)高并发服务器——多路IO转接机制epoll模型
本文部分转载于: http://blog.csdn.net/wqx521/article/details/53783029 http://blog.csdn.net/orz415678659/article/details/8958415 epoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll转载 2017-02-06 17:40:29 · 3909 阅读 · 2 评论 -
(三十五)信号——SIGCHLD信号处理
SIGCHLD的产生条件 1、子进程终止时 2、子进程接收到SIGSTOP信号停止时 3、子进程处在停止态,接受到SIGCONT后唤醒时举例:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/wait.h原创 2017-01-10 21:46:21 · 4348 阅读 · 0 评论 -
(三十四)信号——信号引起的竞态
一、信号引起的竞态 竞态是指设备或系统出现不恰当的执行时序,而得到不正确的结果,由于时间片,或其他因素,导致该到达并响应的信号没有被响应,这就是由信号引起的竞态。 假设我们要写一个sleep函数,其中利用到了信号,编写的过程如下: 1.注册一个信号signal(SIGALRM,handler)。接收内核给出的一个信号。 2.调用alarm()函数。 3.pause()挂起进原创 2017-01-10 21:33:08 · 4587 阅读 · 0 评论 -
(四十)线程——概念
一、什么是线程 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。 大致可以将线程看为一下几原创 2017-01-14 18:14:49 · 4137 阅读 · 0 评论 -
(三十九)守护进程
一、什么是守护进程 Linux服务器在启动时需要启动很多系统服务(其实Windows也这样),它们向本地或网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons原意精灵)来执行的。 守护进程是生存期很长的一种进程。它们独立于控制终端并且周期性地执行某种任务(例如预处理和换输出机制)或等待处理某些发生的事件(例如ftp、ssh原创 2017-01-14 14:12:28 · 4482 阅读 · 0 评论 -
(三十八)会话Session
说起会话,我们经常登录到linux系统,执行各种各样的程序,这都牵涉到会话。但是,一般情况下我们又很少会去关注到会话的存在,很少会去了解它的来龙去脉。 维系一个会话,最常见的有两种方式: 一是基于某种凭证,比如web网站的登录会话,在登录验证之后,服务器就会返回一个session id作为凭证。用户之后的请求总是会带上这个id,而服务器通过这个id也就能知道用户是谁。直到用户注销原创 2017-01-11 19:59:36 · 4171 阅读 · 0 评论 -
(四十二)线程——线程属性
一、引入 linux下线程的属性是可以根据实际项目需要,进行设置。之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。typedef struct{ int etachstate; //线程的分离状态原创 2017-01-17 14:09:55 · 4323 阅读 · 0 评论 -
(四十一)线程——线程原语
一、准备工作 查看manpage关于pthread的函数 man -k pthread 安装pthread相关manpage sudo apt-get install manpages-posix manpages-posix-dev二、pthread_create 创建线程#include <pthread.h>int pthread_create( pthread_t *th原创 2017-01-15 21:42:21 · 4834 阅读 · 0 评论 -
(五十三)高并发服务器——多路IO转接机制Select模型
本文部分转载于: http://blog.csdn.net/wqx521/article/details/53782010 http://blog.csdn.net/orz415678659/article/details/8958415在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个转载 2017-02-03 00:51:30 · 4282 阅读 · 0 评论 -
(五十二)高并发服务器——多线程模型
在使用线程模型开发服务器时需考虑以下问题: 1.调整进程内最大文件描述符上限 2.线程如有共享数据,考虑线程同步 3.服务于客户端线程退出时,退出处理。(退出值,分离态) 4.系统负载,随着链接客户端增加,导致其它线程不能及时得到CPU 多线程的机制一般是使用线程池,模型如下: /* server.c */#include <stdio.h>#include原创 2017-01-24 21:33:36 · 4089 阅读 · 0 评论 -
(五十一)高并发服务器——多进程模型
使用多进程并发服务器时要考虑以下几点: 1.父最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符) 2.系统内创建进程个数(内存大小相关) 3.进程创建过多是否降低整体服务性能(进程调度) 多进程高并发服务器模型如下(简笔画): /* service.c */#include <sys/types.h> #include <stdlib.h>原创 2017-01-24 21:21:47 · 4372 阅读 · 0 评论 -
(四十八)socket编程——引入、网络字节序、IP地址转换函数、sockaddr数据结构
一、什么是socket socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连接的一对一关原创 2017-01-21 23:43:34 · 6431 阅读 · 0 评论 -
(五十)socket编程——出错函数的封装和基于UDP的C/S模型
一、出错函数的封装 在上一节中我们介绍了一系列的网络套接字操作函数,但是系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。 为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,做成一个模块wrap.c:/* wrap.c */#include <stdlib.h>#incl原创 2017-01-22 16:32:29 · 5485 阅读 · 0 评论 -
(四十九)socket编程——网络套接字函数及建立C/S模型(TCP)
一、网络套接字函数1)socket#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);domain: AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用IPv4的地址 AF_INET6 与上面类似,不过是来用IPv6的原创 2017-01-22 16:05:46 · 4957 阅读 · 0 评论 -
(四十七)网络——TCP状态转换图、滑动窗口、半连接状态、2MSL
一、tcp状态转换图 下图对排除和定位网络或系统故障时大有帮助,也帮助我们更好的编写Linux程序,对嵌入式开发也有指导意义。 先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程: 1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。 (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这原创 2017-01-20 19:44:01 · 6583 阅读 · 0 评论 -
(四十六)网络——协议格式
本文借鉴了: http://blog.sina.com.cn/s/blog_426a49850101b3t4.html http://blog.csdn.net/vycode/article/details/7280197 大量转载了: http://www.cnblogs.com/rollenholt/archive/2012/04/25/2469592.html一、数据包封装 传输层及原创 2017-01-20 18:40:59 · 5172 阅读 · 0 评论 -
(四十五)网络基础——OSI七层模型简介和TCP/IP四层模型及其通信过程
一、OSI七层模型 1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。 2.数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常原创 2017-01-18 16:31:46 · 4450 阅读 · 0 评论 -
(四十四)进程间的锁
一、进程间的pthread_mutex通过改变互斥锁的属性,使之成为进程间的锁#include <pthread.h>int pthread_mutexattr_init(pthread_mutexattr_t *attr);int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);int pthread_m原创 2017-01-17 21:57:04 · 4613 阅读 · 0 评论 -
(四十三)线程——线程同步(互斥锁、读写锁、条件变量、信号量)
一、引入 当我们有多个线程一起工作时,就要注意一些问题,就好像小组合作的时候要注意组员之间的关系一样,多个线程同时访问共享数据时可能会冲突,这跟前面讲信号时所说的可重入性是同样的问题。比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 1、从内存读变量值到寄存器 2、寄存器的值加1 3、将寄存器的值写回内存 假设两个线程在多处理器平台上同时执行这三条指原创 2017-01-17 21:25:28 · 5213 阅读 · 2 评论 -
(三十三)信号——可重入函数
一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下也不应该被中断的。 也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它原创 2017-01-10 12:04:41 · 4307 阅读 · 0 评论 -
(三十)信号——信号产生原因以及信号处理行为的简介
这一节是为了解释上一节各个信号的产生原因以及其处理行为: 各个信号产生的原因: 1) SIGHUP: 当用户退出shell时,由该shell启动的所有进程将收到这个信号,默认动作为终止进程 2)SIGINT: 当用户按下了< Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动 作为终止里程。 3)SIGQUIT: 当用户按下< ctrl+>组合原创 2017-01-08 21:42:10 · 5437 阅读 · 0 评论 -
(三十二)信号——信号处理函数
要明白信号处理函数的使用,就要先知道信号的捕捉设定,什么时候会调用信号处理函数和其执行的流程是什么,下图完整的展示了信号捕捉的设定,以及信号处理函数的触发机制: 所以,从上图可以知道,只有当程序中断,异常或系统调用,才会进入内核态,也只有进入了内核态才能处理信号,在这里初学者常常有一个误区,他们会觉得如果我在程序中没有设置中断、不出现异常、不使用系统调用,那就就不会进入内核态,也就不会处理原创 2017-01-10 01:30:18 · 5622 阅读 · 0 评论 -
(六)文件描述符及最大打开文件个数
一、文件描述符 首先要明确一点,在linux系统中一切都可以看成是文件,你的文档是文件、程序是文件、设备也是文件、显示屏、键盘、网口都可以看做是文件,而且在linux中也确确实实是这样。而文件又可分为:普通文件、目录文件、链接文件和设备文件。 文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有原创 2016-12-29 10:41:48 · 4734 阅读 · 0 评论 -
(八)read和write函数的使用
一、read函数 read函数从打开的设备或文件中读取数据。#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前原创 2016-12-29 11:18:47 · 4028 阅读 · 0 评论 -
(七)umask掩码、open函数和close函数的使用
一、open函数的使用在linux系统中,open函数可以打开或创建一个文件。#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);原创 2016-12-29 10:42:32 · 3911 阅读 · 0 评论 -
(三)Ubuntu下常用快捷键
1、切换终端设备:Ctrl + Alt + F1~F7 (F1~F6为tty1到tty6,是控制终端,F7为tty7位图形界面终端)2、打开终端:Ctrl + Alt + T3、在一个终端中创建标签:Ctrl + Shift + T 切换标签:Alt + 1~n4、vi的快速保存退出,shift + ZZ5、vi中Ctrl + n:关键字补全6、vi中Ctrl + ]原创 2016-12-27 18:14:14 · 2622 阅读 · 0 评论 -
(二)nfs的配置及在开发中的作用(基于Ubuntu)
什么是nfs nfs网络文件系统(Network File System),作用就是把网络上的一台电脑当成一个磁盘文件系统使用,譬如,电脑A打开了nfs功能,那么对于同一网络上的电脑B来说,电脑A就是一块硬盘,电脑B访问电脑A的过程就是电脑A把它们之间的连线转换为磁盘的连线,当电脑B读写电脑A的文件时,电脑A自动完成中间和系统、文件系统、硬件驱动的所有过程,直接向电脑B提供文件服务。 说白了原创 2016-12-27 11:13:31 · 2689 阅读 · 0 评论 -
(一)linux常用,但容易忘记的命令
一、cp命令拷贝文件: cp file1 file2 cp file1 dir/ cp file1 ../拷贝目录: cp dir1 dir2 -r cp dir1 ~/ -r二、chown命令 chown [OPTION]… [OWNER:GROUP] FILE… chown [OPTION]… –reference=RFILE FILE… 更改某个文件原创 2016-12-05 18:37:26 · 1840 阅读 · 0 评论 -
(二十)进程——进程环境
进程环境 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。例如: #include <stdio.h>int main(void){ extern char **environ; int i; for(i=0; environ[i]!=NULL; i++) print原创 2017-01-05 17:08:42 · 3887 阅读 · 0 评论 -
(四)静态库和动态库的生成和使用(windows(基于vs)和Linux(基于Ubuntu))
Windows系统vs环境下:1、静态库:1)生成: a)在vs中将程序编写完成 b)依次点击 视图->其他窗口->属性管理器,在弹出的属性管理器窗口中右键“Debug | Win32”条目 -> 属性,在xxx属性页 左侧 依次点击 通用属性 -> 常规 c)在右侧找到“项目默认值”中的第一个“配置类型”,选择“静态库(.lib)” d)依次点击 生成 -> 生成解决方案(ct原创 2016-12-27 18:55:42 · 4448 阅读 · 0 评论 -
(五)C++编写动态库,以及如何调用
关于创建动态链接库文件,并在程序运行过程中连接调用,我是这么理解的; 这篇文章基本是属于入门文档。。。 首先要生成一个DLL文件和lib文件,才能够供给其他程序动态调用或者静态调用。这篇日志是关于动态调用的; 接下来是总结的一些具体步骤: 1.新建项目,win32,win32项目,输入项目名称,例如:MakeDll。 2.确定,下一步: 3.菜单栏选择项目——添加新项,来创建头文件Mak转载 2016-12-28 16:58:20 · 3404 阅读 · 2 评论 -
(十九)进程——概念引入
什么是进程? 一个进程是一个程序的一次执行的过程。它和程序不同,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;而进程是一个动态的概念,也是操作系统分配资源的最小单位。 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。虽然在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一原创 2017-01-05 11:34:04 · 4038 阅读 · 0 评论 -
(十八)VFS虚拟文件系统介绍、dup和dup2函数的介绍与使用
Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽原创 2017-01-01 22:02:36 · 4257 阅读 · 0 评论