02 2014 档案

摘要:按照惯例,UNIX系统shell使用文件描述符0与进程的标准输入(一般是键盘)相关联,文件描述符1与标准输出(一般是显示器)相关联,文件描述符2与标准出错输出(一般是显示器)相关联。 在依从POSIX的应用程序中,幻数0、1、2应当替换成符号常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。这些常量都定义在头文件中。 一般在教材中不会明确区分,但是我们应注意... 阅读全文
posted @ 2014-02-28 12:17 ITtecman 阅读(1875) 评论(0) 推荐(0) 编辑
摘要:问题描述: 计算X^N. 算法思想: 如果N是偶数,我们有X^N = X^(N/2) × X^(N/2),如果N是奇数,则X^N = X^(N-1)/2 × X^(N-1)/2 × X。 算法描述: long intPow(long int X, unsigned int N){ if(N == 0) return 1; if(N == 1) ... 阅读全文
posted @ 2014-02-27 21:22 ITtecman 阅读(431) 评论(0) 推荐(0) 编辑
摘要:欧几里德算法: 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数(The greatest common divisor)。 其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a,d|b,而r... 阅读全文
posted @ 2014-02-27 21:01 ITtecman 阅读(377) 评论(0) 推荐(0) 编辑
摘要:问题描述: 给定一个整数X和整数A0,A1,...,A(N-1),后者已经预先排序并在内存中,求使得Ai=X的下标,如果X不在数据中,则返回i=-1. 算法描述: intBinarySearch(const ElementType A[], ElementType X, int N){ int Low, Mid, High; Low = 0; High = N - 1; ... 阅读全文
posted @ 2014-02-27 20:45 ITtecman 阅读(1654) 评论(0) 推荐(0) 编辑
摘要:在进程间传送打开的文件描述符的能力是非常有用的,可以用它对客户进程/服务器进程应用进行不同的设计。它使一个进程(一般是服务器进程)能够处理为打开一个文件所要求的一切操作(具体如将网络名翻译为网络地址、拨号调制解调器、协商文件锁等)以及向调用进程送回一描述符,该描述符可被用于以后的所有I/O函数。涉及打开文件或设备的所有细节对客户进程而言都是隐藏的。 下面进一步说明从一个进程向另一个进程“传送一打... 阅读全文
posted @ 2014-02-27 14:06 ITtecman 阅读(9181) 评论(2) 推荐(0) 编辑
摘要:0 is an integer constant,'\0' is a character constant,nul is the name of the character constant.NULL is a macro defined in several standard headers,All of these are *not* interchangeable:NULL is to be used for pointers only since it may be defined as ((void *)0), this would cause problems wi 阅读全文
posted @ 2014-02-26 19:59 ITtecman 阅读(522) 评论(0) 推荐(0) 编辑
摘要:问题声明: 给定整数A1,A2,...,AN(可能有负数),求Ai+...+Aj的最大值(1 MaxSum ) MaxSum = ThisSum; else if( ThisSum < 0 ) ThisSum = 0; } return MaxSum;}该算法的时间复杂度为O(N)。 阅读全文
posted @ 2014-02-26 17:55 ITtecman 阅读(331) 评论(0) 推荐(0) 编辑
摘要:UNIX域套接字用于在同一台机器上运行的进程之间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据;它们并不执行协议处理,不需要添加或删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。 UNIX域套接字提供流和数据报两种接口。UNIX域数据报服务是可靠的,既不会丢失消息也不会传递出错。UNIX域套接字是套接字和管道之间的混合物。为了... 阅读全文
posted @ 2014-02-26 15:34 ITtecman 阅读(24683) 评论(0) 推荐(1) 编辑
摘要:基于STREAMS的管道(简称STREAMS管道,STREAMS pipe)是一个双向(全双工)管道。单个STREAMS管道就能向父、子进程提供双向的数据流。 将http://www.cnblogs.com/nufangrensheng/p/3560130.html中图15-1中的单向箭头全部换成双向箭头,即为观察STREAMS管道的两种方式。 ... 阅读全文
posted @ 2014-02-26 13:19 ITtecman 阅读(1524) 评论(0) 推荐(1) 编辑
摘要:通常,recv函数没有数据可用时会阻塞等待。同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞。在套接字非阻塞模式下,行为会改变。在这种情况下,这些函数不会阻塞而是失败,设置errno为EWOULDBLOCK或者EAGAIN。当这些发生时,可以使用poll或select来判断何时能接收或者传输数据。 在Single UNIX Specification中,其实时扩展包含对通用异步... 阅读全文
posted @ 2014-02-25 21:20 ITtecman 阅读(739) 评论(0) 推荐(0) 编辑
摘要:带外数据(Out-of-band data)是一些通信协议所支持的可选特征,允许更高优先级的数据比普通数据优先传输。即使传输队列已经有数据,带外数据先行传输。TCP支持带外数据,但是UDP不支持。套接字接口对带外数据的支持,很大程度受TCP带外数据具体实现的影响。 TCP将带外数据称为“紧急”数据(“urgent”data)。TCP仅支持一个字节的紧急数据,但是允许紧急数据在普通数据传递机制数据... 阅读全文
posted @ 2014-02-25 21:06 ITtecman 阅读(629) 评论(0) 推荐(0) 编辑
摘要:套接字机制提供两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另一个接口允许查询一个选项的状态。可以获取或设置的三种选项: (1)通用选项,工作在所有套接字类型上。 (2)在套接字层次管理的选项,但是依赖于下层协议的支持。 (3)特定与某协议的选项,为每个协议所独有。 Single UNIX Specification仅定义了套接字层的选项(上述三种选项中的前两种选项)。 可... 阅读全文
posted @ 2014-02-25 20:23 ITtecman 阅读(419) 评论(0) 推荐(0) 编辑
摘要:既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信。通过在connect函数里设置对方地址,数据报套接字也可以“连接”。在套接字描述符上采用read和write是非常有意义的,因为可以传递套接字描述符到那些原先设计为处理本地文件的函数。而且可以安排传递套接字描述符到执行程序的子进程,该子进程并不了解套接字。尽管可以通过read和write交换数据,但这就是这两个函数所能做的一切。如果想指定选项、从多个客户端接收数据包或者发送带外数据,需要采用6个传递数据的套接字函数中的一个。三个函数用来发送数据,三个用来接收数据。首先,考察用于发送数据的函数。最 阅读全文
posted @ 2014-02-25 18:09 ITtecman 阅读(3013) 评论(1) 推荐(0) 编辑
摘要:如果处理的是面向连接的网络服务(SOCK_STREAM或SOCK_SEQPACKET),在开始交换数据以前,需要在请求服务的进程套接字(客户端)和提供服务的进程套接字(服务器)之间建立一个连接。客户端可以用connect建立一个连接。#include int connect(int sockfd, const struct sockaddr *addr, socklen_t len);返回值:若成功则返回0,出错则返回-1在connect中所指定的地址是想与之通信的服务器地址。如果sockfd没有绑定到一个地址,connect会给调用者绑定一个默认地址。当连接一个服务器时,出于一些原因,连接可 阅读全文
posted @ 2014-02-25 08:04 ITtecman 阅读(1511) 评论(0) 推荐(0) 编辑
摘要:在学习用套接字做一些有意义的事情之前,需要知道如何确定一个目标通信进程。进程的标识有两个部分:计算机的网络地址可以帮助标识网络上想与之通信的计算机,而服务可以帮助标识计算机上特定的进程。1、字节序运行在同一台计算机上的进程相互通信时,一般不用考虑字节的顺序(字节序),字节序是一个处理器架构特性,用于指示像整数这样的大数据类型的内部字节顺序。图16-1显示一个32位整数内部的字节是如何排序的。 图16-1 32位整数内部的字节序如果处理器架构支持大端(big-endian)字节序,那么最大字节地址对应于数字最低有效字节(LSB);小端(little-endian)字节序则相反:数字最低字节对应于 阅读全文
posted @ 2014-02-24 21:14 ITtecman 阅读(1246) 评论(0) 推荐(0) 编辑
摘要:套接字是通信端点的抽象。与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符。套接字描述符在UNIX系统是用文件描述符实现的。事实上,许多处理文件描述符的函数(如read和write)都可以处理套接字描述符。 要创建一个套接字,可以调用socket函数。 #include int socket(int domain, int type, int protocol);返回值... 阅读全文
posted @ 2014-02-24 15:23 ITtecman 阅读(4336) 评论(0) 推荐(0) 编辑
摘要:网络进程间通信(network IPC):不同计算机(通过网络相连)上运行的进程相互通信的机制。 套接字网络IPC接口:进程能够使用该接口和其他进程通信。通过该接口,其他进程运行位置是透明的,它们可以在同一台计算机上也可以在不同的计算机上。实际上这正是套接字接口的目标之一:同样的接口既可以用于计算机间通信又可以用于计算机内通信。 本篇博文内容摘自《UNIX环境高级编程》(第2版),仅作个... 阅读全文
posted @ 2014-02-24 13:51 ITtecman 阅读(295) 评论(0) 推荐(0) 编辑
摘要:下面详细说明客户进程和服务器进程的某些属性,这些属性受到它们之间所使用的IPC类型的影响。最简单的关系类型是使客户调用fork然后调用exec执行所希望的服务器进程。在fork之前先创建两个半双工管道使数据可在两个方向传输。http://www.cnblogs.com/nufangrensheng/p/3561379.html中的图15-8是这种形式的一个例子。被执行的服务器程序可能是设置用户ID的程序,这使它具有了特权。服务器进程查看客户进程的实际用户ID就可以决定客户进程的身份。(回忆http://www.cnblogs.com/nufangrensheng/p/3510821.html, 阅读全文
posted @ 2014-02-24 13:38 ITtecman 阅读(1475) 评论(0) 推荐(0) 编辑
摘要:POSIX信号量接口,意在解决XSI信号量接口的几个不足之处:POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现。POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉的文件系统操作。POSIX信号量删除时的处理更加合理。XSI信号量被删除后,使用该信号量标识符的操作将会出错返回,并将errno设置为EIDRM。而对于POSIX信号量,操作可以继续正常执行,直到对该信号量的最后一个引用被释放。POSIX信号量有两种形式可供选用:有名和无名。它们的区别在于,如何被创建和销毁,其他方面则完全相同。无名信号量只存在于内存中,并且规定能够访问该内存的进程才能够使用该内存中的 阅读全文
posted @ 2014-02-24 11:25 ITtecman 阅读(4884) 评论(0) 推荐(0) 编辑
摘要:共享存储允许两个或更多进程共享一个给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。使用共享存储时要掌握的唯一窍门是多个进程之间对一个给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享存储访问的同步。(记录锁也可以用于这种场合。) 内核为每个共享存储段设置了一个shmid... 阅读全文
posted @ 2014-02-23 22:13 ITtecman 阅读(2660) 评论(0) 推荐(0) 编辑
摘要:信号量(semaphore)与已经介绍过的IPC机构(管道、FIFO以及消息队列)不同。它是一个计数器,用于多进程对共享数据对象的访问。为了获得共享资源,进程需要执行下列操作:(1)测试控制该资源的信号量。(2)若此信号量的值为正,则进程可以使用该资源。进程将信号量值减1,表示它使用了一个资源单位。(3)若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0.进程被唤醒后,它返回至第(1)步。当进程不再使用由一个信号量控制的共享资源时,该信号量值增1。如果有进程正在休眠等待此信号量,则唤醒它们。为了正确地实现信号量,信号量值的测试及减1操作应当是原子操作。为此,信号量通常是在内核中实现的。 阅读全文
posted @ 2014-02-23 16:11 ITtecman 阅读(1949) 评论(0) 推荐(0) 编辑
摘要:消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。在本节中,我们把消息队列简称为队列(queue),其标识符为队列ID(queue ID)。msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息添加到队列尾端。每个消息包含一个正长整型类型字段,一个非负长度以及实际数据字节(对应于长度),所有这些都在将消息添加到队列时,传送给msgsnd。msgrcv用于从队列中取消息。我们并不一定要以先进先出次序取消息,也可以按消息的类型字段取消息。每个队列都有一个msgqid_ds结构与其相关联:struct msqid_ds { struct ipc_perm ms... 阅读全文
posted @ 2014-02-23 13:15 ITtecman 阅读(2809) 评论(0) 推荐(0) 编辑
摘要:XSI IPC源自于系统V的IPC功能。有三种IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器,它们之间有很多相似之处。1、标识符和键每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符(identifier)加以引用。例如,为了对一个消息队列发送或取消息,只需要知道其队列标识符。与文件描述符不同,IPC标识符不是小的整数。当一个IPC结构被创建,以后又被删除时,与这种结构相关的标识符连续加1,直到达到一个整型数的最大正值,然后又回转到0.标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上会合,需要提供一个外部名方案。为此使用了键(key 阅读全文
posted @ 2014-02-23 10:40 ITtecman 阅读(2520) 评论(0) 推荐(0) 编辑
摘要:FIFO有时被称为命名管道。管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道。但是,通过FIFO,不相关的进程也能交换数据。 FIFO是一种文件类型(参考http://www.cnblogs.com/nufangrensheng/p/3501533.html)。stat结构(http://www.cnblogs.com/nufangrensheng/p/3501385.html)成员... 阅读全文
posted @ 2014-02-23 09:09 ITtecman 阅读(3538) 评论(0) 推荐(0) 编辑
摘要:UNIX系统过滤程序从标准输入读取数据,对其进行适当处理后写到标准输出。几个过滤程序通常在shell管道命令行中线性地连接。当一个程序产生某个过滤程序的输入,同时又读取该过滤程序的输出时,则该过滤程序就成为协同进程(coprocess)。 Korn shell提供了协同进程。Bourne shell、Bourne-again shell和C shell并没有提供按协同进程方式将进程连接起来的方法... 阅读全文
posted @ 2014-02-22 22:21 ITtecman 阅读(2896) 评论(1) 推荐(0) 编辑
摘要:常见的操作是创建一个管道连接到另一个进程,然后读其输出或向其输入端发送数据,为此,标准I/O库提供了两个函数popen和pclose。这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止。#include FILE *popen(const char *cmdstring, const char *type);返回值:若成功则返回文件指针,若出错则返回NULLint pclose(FILE *fp);返回值:cmdstring的终止状态,若出错则返回-1函数popen先执行fork,然后调用exec以执行cmdst 阅读全文
posted @ 2014-02-22 19:53 ITtecman 阅读(8593) 评论(0) 推荐(0) 编辑
摘要:管道是UNIX系统IPC的最古老的形式,并且所有UNIX系统都提供此种通信机制。管道有下面两种局限性:(1)历史上,它们是半双工的(即数据只能在一个方向上流动)。现在,某些系统提供全双工管道,但是为了最佳的可移植性,我们决不应预先假定系统使用此特性。(2)它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。(FIFO没有第二种局限性,UNIX域套接字和命名流管道则没有这两种局限性。)尽管有这两种局限性,半双工管道仍是最常用的IPC形式。每当你在管道线中键入一个由shell执行的命令序列时,shell为每一条命令单独创建一 阅读全文
posted @ 2014-02-21 20:50 ITtecman 阅读(3845) 评论(0) 推荐(0) 编辑
摘要:进程之间相互通信的技术——IPC(InterPorcess Communication)。 UNIX系统IPC类型细分有以下9种: 半双工管道 FIFO 全双工管道 命名全双工管道 消息队列 信号量 共享存储 套接字 STREAMS 前7种(蓝色字体)IPC通常限于同一台主机的各个进程间的IPC。 最后两种(粉红色字体)IPC,即套接... 阅读全文
posted @ 2014-02-21 16:34 ITtecman 阅读(264) 评论(0) 推荐(0) 编辑
摘要:存储映射I/O(Memory-mapped I/O)使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。与此类似,将数据存入缓冲区,则相应字节就自动地写入文件。这样就可以在不使用read和write的情况下执行I/O。 为了使用这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中。这是由mmap函数实现的。 #include void... 阅读全文
posted @ 2014-02-21 16:14 ITtecman 阅读(1521) 评论(0) 推荐(0) 编辑
摘要:管道、FIFO以及某些设备,特别是终端、网络和STREAMS设备有下列两种性质: (1)一次read操作所返回的数据可能少于所要求的数据,即使还没有达到文件尾端也可能是这样。这不是一个错误,应当继续读该设备。 (2)一次write操作的返回值也可能少于指定输出的字节数。这可能是由若干因素造成的,例如,下游模块的流量控制限制。这也不是错误,应当继续写余下的数据至该设备。(通常,只有对非阻塞描述符... 阅读全文
posted @ 2014-02-21 14:19 ITtecman 阅读(3981) 评论(0) 推荐(0) 编辑
摘要:readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读(scatter read)和聚集写(gather write)。#include ssize_t readv(int filedes, const struct iovec *iov, int iovcnt);ssize_t writev(int filedes, const struct iovec *iov, int iovcnt);两个函数的返回值:若成功则返回已读、写的字节数,若出错则返回-1这两个函数的第二个参数是指向iovec结构数组的一个指针:注:关于上面两个函数中第二个参数的说 阅读全文
posted @ 2014-02-21 13:43 ITtecman 阅读(17126) 评论(2) 推荐(3) 编辑
摘要:A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes; An asynchronous I/O operation does not cause the requesting process to be blocked; 使用http:... 阅读全文
posted @ 2014-02-20 22:17 ITtecman 阅读(1067) 评论(0) 推荐(0) 编辑
摘要:当从一个描述符读,然后又写到另一个描述符时,可以在下列形式的循环中使用阻塞I/O:while ((n = read(STDIN_FILENO, buf, BUFSIZ)) > 0) if (write(STDOUT_FILENO, buf, n) != n) err_sys("w... 阅读全文
posted @ 2014-02-20 14:26 ITtecman 阅读(1122) 评论(0) 推荐(0) 编辑
摘要:http://en.wikipedia.org/wiki/STREAMSSTREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口、I/O多路转接中poll(轮询)函数的使用 以及基于STREAMS的管道和命名管道的实现。请注意不要将这里说明的STREAMS(流)与标准I/O库(http://www.cnblogs.com/nufangrensheng/p/3505254.html)中使用的流(stream)相混淆。流机制是由Dennis Ritchie开发的,其目的是用通用、灵活的方法改写传统的字符I/O系统(c 阅读全文
posted @ 2014-02-19 20:26 ITtecman 阅读(1852) 评论(0) 推荐(0) 编辑
摘要:若两个人同时编辑一个文件,其后果将如何呢?在很多UNIX系统中,该文件的最后状态取决于写该文件的最后一个进程。但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件。为了向进程提供这种功能,商用UNIX系统提供了记录锁机制。 记录锁(record locking)的功能是:当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。对于UNIX系统而言,“记录”这... 阅读全文
posted @ 2014-02-18 14:02 ITtecman 阅读(1904) 评论(1) 推荐(0) 编辑
摘要:http://www.cnblogs.com/nufangrensheng/p/3515035.html中曾将系统调用分成“低速”系统调用和其他系统调用两类。低速系统调用是可能会使进程永远阻塞的一类系统调用,它们包括下列调用:如果某些文件类型(例如管道、终端设备和网络设备)的数据并不存在,则读操作可能会使调用者永远阻塞。如果数据不能立即被上述同样类型的文件接受(由于在管道中无空间、网络流控制等),则写操作也会使调用者永远阻塞。在某种条件发生之前,打开某些类型的文件会被阻塞(例如打开一个终端设备可能需等到与之连接的调制解调器应答;又例如在没有其他进程已用读模式打开该FIFO时,若以只写模式打开F 阅读全文
posted @ 2014-02-11 20:25 ITtecman 阅读(793) 评论(0) 推荐(0) 编辑
摘要:/** Error routines for programs that can run as a daemon.*/#include "apue.h"#include /* for definition of errno */#include /* ISO C variable arguments */#include static void log_doit(int, i... 阅读全文
posted @ 2014-02-11 17:20 ITtecman 阅读(213) 评论(0) 推荐(0) 编辑
摘要:守护进程常常用作服务器进程。 一般而言,服务器是等待客户进程与其联系的一个进程,客户进程向它提出某种类型的服务要求。 阅读全文
posted @ 2014-02-11 16:48 ITtecman 阅读(238) 评论(0) 推荐(0) 编辑
摘要:在UNIX系统中,守护进程遵循下列公共惯例: 若守护进程使用锁文件,那么该文件通常存放在/var/run目录中。注意,守护进程可能需要具有超级用户权限才能在此目录下创建文件。锁文件的名字通常是name.pid,其中,name是该守护进程或服务的名字。例如cron守护进程锁文件的名字是/var/run/crond.pid。 若守护进程支持配置选项,那么配置文件通常存放在/etc目录中。... 阅读全文
posted @ 2014-02-11 16:37 ITtecman 阅读(1121) 评论(0) 推荐(0) 编辑
摘要:为了正常运行,某些守护进程实现为单实例的,也就是在任一时刻只运行该守护进程的一个副本。例如,该守护进程可能需要排它地访问一个设备。在cron守护进程情况下,如果同时有多个实例运行,那么每个副本都可能试图开始某个预定的操作,于是造成该操作的重复执行,这很可能导致出错。 如果守护进程需要访问一设备,而该设备驱动程序将阻止多次打开在/dev目录下的相应设备节点,那么这就达到了任何时刻只运行守护进程一个... 阅读全文
posted @ 2014-02-11 14:42 ITtecman 阅读(2863) 评论(2) 推荐(0) 编辑
摘要:与守护进程有关的一个问题是如何处理出错消息。因为它没有控制终端,所以不能只是简单地写到标准出错上。在很多工作站上,控制台设备运行一个窗口系统,所以我们不希望所有守护进程都写到控制台设备上。我们也不希望每个守护进程将它自己的出错消息写到一个单独的文件中。对系统管理人员而言,如果要关心哪一个守护进程写到哪一个记录文件中,并定期地检查这些文件,那么一定会使他感到头痛。所以,需要有一个集中的守护进程出错记... 阅读全文
posted @ 2014-02-11 13:58 ITtecman 阅读(675) 评论(0) 推荐(0) 编辑
摘要:在编写守护进程时需遵循一些基本规则,以便防止产生并不需要的交互作用。下面先说明这些规则,然后给出一个按照这些规则编写的函数daemonize。(1)首先要做的是调用umask将文件模式创建屏蔽字设置为0。由继承得来的文件模式创建屏蔽字可能会拒绝设置某些权限。例如,若守护进程要创建一个组可读、写的文件,而继承的文件模式创建屏蔽字可能屏蔽了这两种权限,于是所要求的组可读、写就不能起作用。(2)调用fork,然后使父进程退出(exit)。这样做实现了下面几点:第一,如果该守护进程是作为一条简单shell命令启动的,那么父进程终止使得shell认为这条命令已经执行完毕(也就没有了控制终端);第二,子进 阅读全文
posted @ 2014-02-11 11:39 ITtecman 阅读(1921) 评论(2) 推荐(1) 编辑
摘要:先来看一些常用的系统守护进程,以及它们怎样和http://www.cnblogs.com/nufangrensheng/p/3513323.html、http://www.cnblogs.com/nufangrensheng/p/3513400.html、http://www.cnblogs.com/nufangrensheng/p/3513443.html中所述的进程组、会话和控制终端等概念相关... 阅读全文
posted @ 2014-02-08 20:20 ITtecman 阅读(1541) 评论(0) 推荐(0) 编辑
摘要:守护进程也称精灵进程(daemon)是生存期较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX系统有很多守护进程,它们执行日常事务活动。 阅读全文
posted @ 2014-02-08 19:21 ITtecman 阅读(248) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/nufangrensheng/p/3498723.html中介绍了pread和pwrite函数,这些函数在多线程环境下是非常有帮助的,因为进程中的所有线程共享相同的文件描述符。 考虑两个线程,在同一时间对同一文件描述符进行读写操作。 线程A:lseek(fd, 300, SEEK_SET);read(fd, buf1, 100);线程B:ls... 阅读全文
posted @ 2014-02-08 17:26 ITtecman 阅读(475) 评论(0) 推荐(0) 编辑
摘要:当线程调用fork时,就为子进程创建了整个进程地址空间的副本。回忆http://www.cnblogs.com/nufangrensheng/p/3509492.html中讨论的写时复制,子进程与父进程是完全不同的进程,只要两者都没有对内存作出改动,父进程和子进程之间还可以共享内存页的副本。 子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量、读写锁和条件变量的状态。如果父进程包含... 阅读全文
posted @ 2014-02-08 17:10 ITtecman 阅读(1200) 评论(0) 推荐(0) 编辑
摘要:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变。 进程中的信号是递送到单个线程的。如果信号与硬件故障或计时器超时相关,该信号就被发送到引起该事件的线程中去,而其他的信号则被发送到任意一个线程。 http://www.cnblogs.com/nufangr... 阅读全文
posted @ 2014-02-08 14:44 ITtecman 阅读(3755) 评论(0) 推荐(0) 编辑
摘要:有两个线程属性并没有包含在pthread_attr_t结构中,它们是可取消状态和可取消类型。这两个属性影响着线程在响应pthread_cancel函数(http://www.cnblogs.com/nufangrensheng/p/3519175.html)调用时所呈现的行为。 可取消状态属性可以是PTHREAD_CANCEL_ENABLE,也可以是PTHREAD_CANCEL_DISABLE。... 阅读全文
posted @ 2014-02-07 17:38 ITtecman 阅读(810) 评论(0) 推荐(0) 编辑
摘要:线程私有数据(也称线程特定数据)是存储和查询与某个线程相关的数据的一种机制。把这种数据称为线程私有数据或线程特定数据的原因是:希望每个线程可以独立地访问数据副本,而不需要担心与其他线程的同步访问问题。 线程模型促进了进程中数据和属性的共享,许多人在设计线程模型时会遇到各种麻烦。但在这样的模型中,为什么还需要提出一些合适的用于阻止共享的接口呢?其中有两个原因: 第一,有时候需要维护基于每个线程的... 阅读全文
posted @ 2014-02-06 18:09 ITtecman 阅读(3739) 评论(0) 推荐(0) 编辑
摘要:有了信号处理程序和线程,多个控制线程在同一时间可能潜在地调用同一个函数。 如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。在Single UNIX Specification中定义的所有函数,除了表12-5中列出的函数以外,其他函数都保证是线程安全的。另外,ctermid和tmpnam函数在参数传入空指针时并不能保证是线程安全的。类似地,wcrtomb和wcsrtombs... 阅读全文
posted @ 2014-02-04 20:53 ITtecman 阅读(1577) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示