随笔分类 -  后台开发

网络编程,多线程编程
摘要:来点绿色放松一下眼睛吧 :) 文件系统是对文件和目录的组织集合。 一 设备文件 设备文件和系统的某个设备相对应。 设备驱动程序 处理设备的所有IO请求。 提供了一致的API接口,对应于系统调用的open, close, read, write, mmap以及ioctl,屏蔽了底层设备的差异。 设备的 阅读全文
posted @ 2016-06-02 19:45 suzhou 阅读(1146) 评论(0) 推荐(2) 编辑
摘要:故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详。首先,了解一下进程的基本概念,进程在内存中布局和内容。此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内存的。一 进程1 进程和程序进程:是一个可执行程序的实例。程序:包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程。包含如下信息:二进制格式标识:如最常见的ELF格式。机器语言指令:对程序算法进行... 阅读全文
posted @ 2016-04-21 21:31 suzhou 阅读(1113) 评论(1) 推荐(0) 编辑
摘要:春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动。上周末在元大都遗址公园海棠花溪拍的海棠花。进入正题。O_DIRECT和O_SYNC是系统调用open的flag参数。通过指定open的flag参数,以特定的文件描述符打开某一文件。这两个flag会对写盘的性能有很大的影响,因此对这两个flag做一些详细的了解。先看一个open函数的使用例子./* Open new or existi... 阅读全文
posted @ 2016-04-12 10:47 suzhou 阅读(17325) 评论(3) 推荐(3) 编辑
摘要:信号就是软中断。信号提供了异步处理事件的一种方式。例如,用户在终端按下结束进程键,使一个进程提前终止。1 信号的概念每一个信号都有一个名字,它们的名字都以SIG打头。例如,每当进程调用了abort函数时,都会产生一个SIGABRT信号。每一个信号对应一个正整数,定义在头文件中。没有信号对应整数0,kill函数使用信号编号0表示一种特殊情况,所以信号编号0又叫做空信号(null signal)。下... 阅读全文
posted @ 2015-05-08 18:49 suzhou 阅读(3912) 评论(3) 推荐(0) 编辑
摘要:在前面的章节我们了解到,进程之间是有关联的:每个进程都有一个父进程;子进程退出时,父进程可以感知并且获取子进程的退出状态。本章我们将了解:进程组的更多细节;sessions的内容;login shell和我们从login shell启动的进程之间的关系。一 终端登录(Terminal Logins... 阅读全文
posted @ 2015-04-02 21:22 suzhou 阅读(1018) 评论(1) 推荐(0) 编辑
摘要:1 进程快照(Process Accounting)当一个进程终止时,内核会为该进程保存一些数据,包括命令的小部分二进制数据、CPU time、启动时间、用户Id和组Id。这样的过程称为process accounting,本篇译为进程快照。函数acct可以打开或关闭进程快照功能。负责记录快照的数据... 阅读全文
posted @ 2015-04-01 10:52 suzhou 阅读(1316) 评论(0) 推荐(0) 编辑
摘要:本篇主要介绍一下几个内容:竞态条件(race condition)exec系函数解释器文件1 竞态条件(Race Condition)竞态条件:当多个进程共同操作一个数据,并且结果依赖于各个进程的操作顺序时,就会发生竞态条件。例如fork函数执行后,如果结果依赖于父子进程的执行顺序,则会发生竞态条件。说到fork之后的父子进程的执行顺序,我们可以通过下面的方式指定执行顺序:如果父进程等待子进程... 阅读全文
posted @ 2015-03-24 22:01 suzhou 阅读(1436) 评论(2) 推荐(0) 编辑
摘要:本章包含内容有:创建新进程程序执行(program execution)进程终止(process termination)进程的各种ID1 进程标识符(Process Identifiers)每个进程都有一个唯一的标识符,进程ID(process ID)。进程的ID是可重用的,如果一个进程被终止,那么它的进程ID会被系统回收,但是会延迟使用,防止该进程ID标识的新进程被误认为是以前的进程。三个特... 阅读全文
posted @ 2015-03-18 22:45 suzhou 阅读(1697) 评论(2) 推荐(1) 编辑
摘要:在学习进程控制相关知识之前,我们需要了解一个单进程的运行环境。本章我们将了解一下的内容:程序运行时,main函数是如何被调用的;命令行参数是如何被传入到程序中的;一个典型的内存布局是怎样的;如何分配内存;程序如何使用环境变量;程序终止的各种方式;跳转(longjmp和setjmp)函数的工作方式,以及如何和栈交互;进程的资源限制1 main函数main函数声明:int main (int arg... 阅读全文
posted @ 2015-03-06 20:22 suzhou 阅读(1484) 评论(2) 推荐(0) 编辑
摘要:1 二进制IO(Binary IO)在前一篇我们了解了逐字符读写和逐行读写函数。如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低。为了应对这种场景,标准IO库提供了fread和fwrite函数。函数声明:#include size_t fread(void *restrict ptr, size_t size, size_t nob... 阅读全文
posted @ 2015-03-02 16:53 suzhou 阅读(1557) 评论(0) 推荐(0) 编辑
摘要:标准IO函数库隐藏了buffer大小和分配的细节,使得我们可以不用关心预分配的内存大小是否正确的问题。虽然这使得这个函数库很容易用,但是如果我们对函数的原理不熟悉的话,也容易遇到很多问题。1 流和FILE实体(Streams and FILE Objects)前面的章节中,IO集中在文件描述符,每一个打开的文件都对应一个文件描述符,通过文件描述符对文件进行操作。现在使用了标准IO库,讨论的重点集... 阅读全文
posted @ 2015-02-28 10:48 suzhou 阅读(2008) 评论(0) 推荐(1) 编辑
摘要:1 File Times每个文件会维护三个时间字段,每个字段代表的时间都不同。如下表所示:字段说明:st_mtim(the modification time)记录了文件内容最后一次被修改的时间。st_ctim(the changed-status time)记录了文件的i-node最后一次被修改的时间,如修改文件权限位,修改文件所有者ID,修改关联到该文件的link数目。i-node中的信息和... 阅读全文
posted @ 2015-02-27 12:52 suzhou 阅读(1229) 评论(0) 推荐(0) 编辑
摘要:本篇主要介绍文件和文件系统中常用的一些函数,文件系统的组织结构和硬链接、符号链接。通过对这些知识的了解,可以对Linux文件系统有更为全面的了解。1 umask函数之前我们已经了解了每个文件与权限相关的9个位(bit),我们现在来了解一下当每个进程创建文件时默认会设置该文件的文件权限(the file mode creation mask)。umask函数设置该进程默认创建文件的权限掩码(the... 阅读全文
posted @ 2015-02-26 20:35 suzhou 阅读(1366) 评论(0) 推荐(1) 编辑
摘要:在前面的两篇,我们了解了IO操作的一些基本操作函数,包括open、read和write。 在本篇我们来学习一下文件系统的其他特性和一个文件的属性,涉及的函数功能包括:查看文件的所有属性;改变文件所有者;改变文件权限;操作文件夹。 我们还会了解一些文件系统相关的数据结构和符号链接(symbol... 阅读全文
posted @ 2015-02-17 22:52 suzhou 阅读(1543) 评论(2) 推荐(0) 编辑
摘要:引言:本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构。还会讨论集中常见的文件IO控制函数,包括:dup和dup2sync,fsync和fdatasyncfcntlioctl/dev/fd一、文件共享这里所说的文件共享主要指的是进程间共享打开的文件。这一节... 阅读全文
posted @ 2015-02-15 22:55 suzhou 阅读(1754) 评论(0) 推荐(1) 编辑
摘要:本文介绍在套接字的I/O操作上设置超时的三种方法。分别是调用alarm,使用select和设置套接字SO_RCVTIMEO选项,并分别带有实现的demo。 阅读全文
posted @ 2014-04-03 09:28 suzhou 阅读(2719) 评论(0) 推荐(2) 编辑
摘要:什么是守护进程? 守护进程的启动方法有哪些? 如何创建一个守护进程? 守护进程的创建流程是什么? 阅读全文
posted @ 2014-04-02 15:48 suzhou 阅读(3373) 评论(3) 推荐(1) 编辑
摘要:问题聚焦:当客户端阻塞于从标准输入接收数据时,将读取不到别的途径发过来的必要信息,如TCP发过来的FIN标志。因此,进程需要内核一旦发现进程指定的一个或多个IO条件就绪(即输入已准备好被读取,或者描述符已能承接更多的输出),它就通知进程。这个机制称为I/O复用,这是由select, poll, epoll函数支持的。编译环境: Ubuntu12.04 g++需求描述:单进程,IO复用,实现多个连接同时监听和收发信息当服务器进程一终止,客户就能马上得到结果(select +shutdown实现)当客户端使用"exit"命令或者Cirl+C结束进程时,服务器可以立即感应到,并关 阅读全文
posted @ 2014-03-31 11:58 suzhou 阅读(445) 评论(0) 推荐(0) 编辑
摘要:在前面我们大概浏览了一下服务器编程需要掌握的一些知识和技术,以及架构思想. 实践,才是检验真理的唯一标准。。从这节起我们将在这些技术的基础上,一步步实现以及完善一个服务器,同时也是对这些技术的更深入的思考。 本节我们将实现一个简单的回射服务器,包括TCP连接,文本处理,并发(多进程实现),以及子进程退出后的处理动作。 阅读全文
posted @ 2014-03-27 19:37 suzhou 阅读(545) 评论(0) 推荐(0) 编辑
摘要:问题聚焦: 在简单地介绍线程的基本知识之后,主要讨论三个方面的内容: 1 创建线程和结束线程; 2 读取和设置线程属性; 3 线程同步方式:POSIX信号量,互斥锁和条件变量。Linux线程概述线程模型程序中完成一个独立任务的完整执行序列,即一个可调度的实体。分为内核线程和用户线程当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程,可见,内核线程相当于用户线程运行的“容器”。一个进程可以拥有M个内核线程和N个用户线程, Mint pthread_create ( pthread_t* thread, const pthread_attr_t* attr, ... 阅读全文
posted @ 2014-03-07 14:19 suzhou 阅读(312) 评论(0) 推荐(0) 编辑