2018年2月24日

读写锁

摘要: 1、概述 读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量要么是锁住状态,要么是不加锁状态,而且一次只有一个线程对其加锁。读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可用同时占有读模式的读写锁。读写锁也叫做共享-独占 阅读全文

posted @ 2018-02-24 16:04 AlanTu 阅读(237) 评论(0) 推荐(0) 编辑

System V 消息队列 - 复用消息

摘要: 消息队列中的消息结构可以由我们自由定义,具备较强的灵活性。通过消息结构可以共享一个队列,进行消息复用。通常定义一个类似如下的消息结构: #define MSGMAXDAT 1024 struct mymsg { long msg_len; //消息长度 long msg_type; //消息类型 l 阅读全文

posted @ 2018-02-24 16:03 AlanTu 阅读(202) 评论(0) 推荐(0) 编辑

System V 消息队列

摘要: 1、概述 消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。System V 消 阅读全文

posted @ 2018-02-24 16:01 AlanTu 阅读(407) 评论(0) 推荐(0) 编辑

System V IPC

摘要: 1、概述 System V IPC共有三种类型:System V消息队列、System V 信号量、System V 共享内存区。 System V IPC操作函数如下: 2、key_t键和ftok函数 三种类型的IPC使用key_t值作为他们的名字,头文件<sys/types.h>把key_t定义 阅读全文

posted @ 2018-02-24 15:58 AlanTu 阅读(428) 评论(0) 推荐(0) 编辑

Unix环境高级编程(二十)伪终端

摘要: 1、综述 伪终端对于一个应用程序而言,看上去像一个终端,但事实上伪终端并不是一个真正的终端。从内核角度看,伪终端看起来像一个双向管道,而事实上Solaris的伪终端就是用STREAMS构建的。伪终端总是成对地使用的,就好像是个管道的两端。一端的设备称为"主设备"(master),另一端的设备称为"从 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(1474) 评论(0) 推荐(0) 编辑

Unix环境高级编程(二十一)数据库函数库

摘要: 本章的内容是开发一个简单的、多用户数据库的C函数库。调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录。绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁、B+树、动态散列实现数据库。 1、函数库 开发类似ndbm函数库,增加了并发控制机制,从而允许多进 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(432) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十九)终端I/O

摘要: 终端I/O应用很广泛,用于终端、计算机之间的直接连线、调制解调器以及打印机等等。终端I/O有两种不同的工作模式: (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返回一行。(默认模式) (2)非规范模式输入处理:输入字符并不组成行。 终端设备是由一般位于内核的终端 阅读全文

posted @ 2018-02-24 15:55 AlanTu 阅读(681) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十八)高级进程间通信

摘要: 本章主要介绍了基于STREAM的管道和UNIX域套接字,这些IPC可以在进程间传送打开文件描述符。服务进程可以使用它们的打开文件描述符与指定的名字相关联,客户进程可以使用这些名字与服务器进程通信。 1、基于STREAMS的管道 STREAMS pipe是一个双向(全双工)管道,单个STREAMS管道 阅读全文

posted @ 2018-02-24 15:54 AlanTu 阅读(1027) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十七)网络IPC套接字

摘要: 通过网络套接字可以使得不同计算机上运行的进程相互通信。 1、创建套接字 #include <sys/socket.h> Int socket( int domain, int type, int protocol); 注意:AF_LOCAL域是AF_UNIX的别名,AF_UNSPEC域可以代表任何域 阅读全文

posted @ 2018-02-24 15:49 AlanTu 阅读(306) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十六)进程间通信

摘要: 进程间通信(IPC)是指能在两个进程间进行数据交换的机制。现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成。 IPC的机制的作用: (1)一个软件也能更容易跟第三方软件或内核进行配合的集成,或移植.如管道,在shell 下执行 ps –aux | grep bash。 阅读全文

posted @ 2018-02-24 15:47 AlanTu 阅读(1159) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十五)高级I/O

摘要: 1、非阻塞I/O 对低速设备的I/O操作可能会使进程永久阻塞,这类系统调用主要有如下情况:(1)如果数据并不存在,则读文件可能会使调用者永远阻塞(例如读管道、终端设备和网络设备)。(2)如果数据不能立即被接受,则写这些同样的文件也会使调用者永远阻塞;(3)在某些条件发生之前,打开文件会被阻塞(例如以 阅读全文

posted @ 2018-02-24 15:46 AlanTu 阅读(501) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十四)守护进程实现时间服务器

摘要: 守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断 阅读全文

posted @ 2018-02-24 15:45 AlanTu 阅读(299) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十三)守护进程

摘要: 守护进程也称为精灵进程是一种生存期较长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的,例如inetd守护进程。 1、守护进程的特征 用ps命令察看一些常用的系 阅读全文

posted @ 2018-02-24 15:43 AlanTu 阅读(493) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十二)线程控制

摘要: 本章介绍了一个进程中多个线程之间如何保持数据的似有性及进程的系统调用如何与线程进行交互。 1、线程限制: Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询。和其它的限制使用目的一样,为了应用程序的在不同操作 系统的可移植性。 一些限制: PTHREAD_ 阅读全文

posted @ 2018-02-24 15:42 AlanTu 阅读(774) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十一)线程

摘要: 一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务。线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程似有数据。进程的所有信息对该进程的所有线程都是共享的 阅读全文

posted @ 2018-02-24 15:39 AlanTu 阅读(434) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十)信号续

摘要: 1、signal函数 Unix系统的信号机制最简单的接口是signal函数,函数原型如下: #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t hand 阅读全文

posted @ 2018-02-24 15:36 AlanTu 阅读(318) 评论(0) 推荐(0) 编辑

Unix环境高级编程(九)信号

摘要: 信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号)。 产生信号的条件: (1)当用户按某些终端键时,引发终端产生的信号。 (2)硬件异常产生信号。 (3)进程调用k 阅读全文

posted @ 2018-02-24 15:30 AlanTu 阅读(336) 评论(0) 推荐(0) 编辑

Unix环境高级编程(八)进程关系

摘要: 本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用。通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态。先将本章基本的知识点总结如下,日后再看时候好好总结一下。 1、终端登录 介绍了有终端登录Unix系统的过程。通过init进程读文件/etc/t 阅读全文

posted @ 2018-02-24 15:27 AlanTu 阅读(260) 评论(0) 推荐(0) 编辑

Unix环境高级编程(七)fork函数总结

摘要: 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果 阅读全文

posted @ 2018-02-24 15:26 AlanTu 阅读(795) 评论(0) 推荐(0) 编辑

Unix环境高级编程(六)进程控制

摘要: 本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制。 1、进程标识符 每一个进程都有一个非负整数标识的唯一进程ID。ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作。ID为1的进程为init进 阅读全文

posted @ 2018-02-24 15:25 AlanTu 阅读(387) 评论(0) 推荐(0) 编辑

导航