- 博客(27)
- 资源 (48)
- 收藏
- 关注
原创 Linux系统高级编程系列教程
系统调用01、什么是系统调用?02、Linux系统调用之I/O操作(文件操作)03、文件描述符的复制:dup(), dup2()多进程实现多任务04、进程的介绍05、Linux可执行文件结构与进程结构06、多进程实现多任务(一):fork()07、多进程实现多任务(二):vfork()08、进程的控制:结束进程、等待进程结束09、Linux特殊进
2015-06-23 09:23:25 7599 2
转载 Linux系统编程——进程的控制:结束进程、等待进程结束
一、结束进程首先,我们回顾一下 C 语言中 continue, break, return 的作用:continue: 结束本次循环break: 跳出整个循环,或跳出 switch() 语句return: 结束当前函数而我们可以通过 exit() 或 _exit() 来结束当前进程。所需头文件:#include void exit(int val
2015-06-25 20:08:34 3792
原创 Linux系统编程——vfork() 函数详解
所需头文件:#include #include pid_t vfork(void);功能:vfork() 函数和 fork() 函数(fork()如何使用,请点此链接)一样都是在已有的进程中创建一个新的进程,但它们创建的子进程是有区别的。参数:无返回值:成功:子进程中返回 0,父进程中返回子
2015-06-24 20:02:11 12987 3
转载 Linux系统编程—— fork() 函数详解
需要的头文件:#include #include pid_t fork(void);功能:用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。参数:无返回值:成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为无符号整型。失败:返回 -1。失败的两个主要原因是:1
2015-06-24 16:45:06 2353
转载 Linux 可执行文件结构与进程结构
一、Linux可执行文件结构在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况:可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分。各段基本内容说明如下:代码区:存放 CPU 执行的机器指令。通常代码区是可共享的(即
2015-06-24 14:12:59 3040
转载 Linux系统编程——进程管理
引言: 在Linux的内核的五大组成模块中,进程管理模块时非常重要的一部分,它虽然不像内存管理、虚拟文件系统等模块那样复杂,也不像进程间通信模块那样条理化,但作为五大内核模块之一,进程管理对我们理解内核的运作、对于我们以后的编程非常重要。同时,作为五大组成模块中的核心模块,它与其他四个模块都有联系。下面就对进程模块进行想写的介绍,首先要了解进程及其相关的概念。其次介
2015-06-24 11:53:49 1447
转载 Linux系统编程——进程调度浅析
概述操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说“某某函数比某某函数效率高XX倍”一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对 TASK_RUNNING 状态的进程进行调度。如果进程不可执行(正在睡眠或其他),那么它
2015-06-24 11:23:40 1231
原创 Linux系统编程——进程介绍
一、进程概述我们平时写的 C 语言代码,通过编译器编译,最终它会成为一个可执行程序,当这个可执行程序运行起来后(没有结束之前),它就成为了一个进程。程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。程序是静态的,进程是动态的。在 Linux 系
2015-06-23 20:15:25 3484 1
原创 Linux系统编程——文件描述符的复制:dup()和dup2()
dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁。对比于 dup(), dup
2015-06-23 13:51:43 3891
原创 Linux系统编程——系统调用之 I/O 操作(文件操作)
一、文件描述符在 Linux 的世界里,一切设备皆文件。我们可以系统调用中 I/O 的函数(I:input,输入;O:output,输出),对文件进行相应的操作( open()、close()、write() 、read() 等)。打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件。这个文件描述符相当于这个已打开文件的标号,文件描述符是非
2015-06-23 11:15:59 5113
原创 浅谈标准I/O缓冲区
转自:http://blog.csdn.net/tennysonsky/article/details/43490985标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/O库最令人迷惑的也是它的缓冲。标准I/O提供了三种类型的缓冲:
2015-06-23 09:35:23 1764
转载 Linux系统编程——Linux系统调用
系统调用概述系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给
2015-06-23 09:28:59 3928
原创 Linux网络编程——tcp并发服务器(epoll实现)
通过epoll实现tcp并发回执服务器(客户端给服务器发啥,服务器就给客户端回啥)代码如下:#include #include #include #include #include #include #include #include #include #include #include #define OPEN_MAX 100int main(int arg
2015-06-18 20:26:13 19897 9
原创 Linux网络编程——I/O复用函数之epoll
一、epoll概述epoll 是在 2.6 内核中提出的,是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说,epoll 更加灵活,没有描述符限制。epoll 使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的 copy 只需一次。二、epoll操作过程需
2015-06-18 10:01:00 3387 1
原创 Linux网络编程——tcp并发服务器(poll实现)
想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》代码:#include #include #include #include #include #include #include #include #include #include #include #define OPEN_MAX 100int main(int
2015-06-17 17:13:27 6066
原创 Linux网络编程——I/O复用之poll函数
一、回顾前面的selectselect优点:目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点select缺点:1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大,同时每次调用 select() 都需要在内核遍历传递进来的所有 fd,这个开销在 fd 很多时也很大。2
2015-06-17 15:09:04 19606 3
原创 Linux网络编程——tcp并发服务器(I/O复用之select)
与多线程、多进程相比,I/O复用最大的优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。
2015-06-16 16:10:51 5604 1
原创 Linux网络编程——I/O复用之select详解
一、I/O复用概述I/O复用概念:解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合:1.当客户处理多个描述符(通常是交互式输入、网络套接字)时,必须使用I/O复用。2.tcp服务器既要处理监听套接字,又要处理已连接套接字,一般要使用I/O复用。3.如果一个服务器既要处
2015-06-15 17:46:49 5894 3
原创 Linux网络编程——tcp并发服务器(多线程)
tcp多线程并发服务器多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息,这种机制又带来了同步问题。tcp多线程并发服务
2015-06-15 15:27:04 22478 5
原创 Linux网络编程——tcp并发服务器(多进程)
一、tcp并发服务器概述一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。二、多进程并发服务器在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的
2015-06-15 15:02:24 12549 3
原创 Linux网络编程14——tcp、udp迭代服务器
服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器。循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一
2015-06-15 10:26:30 3255
转载 因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
因特网使用的IP协议是无连接的,因此其传输是不可靠的。这样容易使人们感到因特网很不可靠,那为什么当初不直接把它设计为可靠的?先打一个比方。邮局寄送的平信很像无连接的IP数据报。每封平信可能走不同的传送路径,同时平信也不保证不丢失。当我们发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。邮局会说:“平信不保证不丢失。怕丢失就请你寄挂号信”。但是大家并不会将所有的信件都用挂号
2015-06-13 09:24:02 2978 2
原创 Linux网络编程--tcp服务器
一、做为 TCP 服务器需要具备的条件呢?具备一个可以确知的地址( bind() ):相当于我们要明确知道移动客服的号码,才能给他们电话;让操作系统知道是一个服务器,而不是客户端( listen() ):相当于移动的客服,他们主要的职责是被动接听用户电话,而不是主动打电话骚扰用户;等待连接的到来( accept() ):移动客服时刻等待着,来一个客户接听一个。接收端使用 bind(
2015-06-12 09:48:39 4304 1
转载 TCP 通信过程中各步骤的状态
状态图 1状态图 2对于上面的图 N 多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下 TCP 建立连接的三次握手过程,以及关闭连接的四次握手过程,详情请看《浅
2015-06-11 17:57:16 6209
原创 Linux网络编程——浅谈 TCP 三次握手和四次挥手
三次握手在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此
2015-06-11 16:12:58 7985 5
原创 Linux 网络编程——TCP编程之客户端
一、TCP概述TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程3)可靠、出错重传、且每收到一个数据都要给出相应的确认,保证数据传输的可靠性
2015-06-08 14:05:15 5051 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人