摘要:
其他的dbm函数现在我们已经看到基本的dbm函数,我们可以简要的介绍一下dbm所使用的其他的函数:int dbm_delete(DBM *database_descriptor, datum key);int dbm_error(DBM *database_descriptor);int dbm_clearerr(DBM *database_descriptor);datum dbm_firstkey(DBM *database_descriptor);datum dbm_nextkey(DBM *database_descriptor);dbm_deletedbm_delete函数用于由数据 阅读全文
摘要:
数据库我们已经了解了如何使用文件来存储数据,所以为什么我们应该使用数据库呢?非常简单,在某些环境下,数据库特性提供了更好的方法来解决问题。使用数据库要好于存储文件,有下面两个理由:我们可以存储尺寸上变化的数据记录,而这使用普通,无结构的文件是难于实现的。数据库的存储与数据的读取使用索引。最大的好处就在于这个索引不必是一个简单的记录号,这在普通文件中是很容易使用的,而是字符串。dbm数据库所有的Linux版本,以及大多数的Unix变种,都会带有一个基本,但是十分有效的例程数据存储集合,名为dbm数据。dbm数据库对于存储相对静止的索引数据是十分优秀的。一些数据库的纯粹主义者会认为dbm根本就不是 阅读全文
摘要:
竞争锁现在我们已经了解了如何测试文件上已经存在的锁,下面我们来看一下当两个程序在文件的同一块区域竞争锁时会出现什么情况。我们将会使用我们的lock3程序在文件的第一个位置进行加锁操作,然而一个新的程序在同样的位置尝试加锁。要完成这个例子,我们需要添加一些解锁操作。试验--竞争锁下面是程序lock5.c,试图在文件中已被加锁的区域进行加锁操作,而不是测试文件不同部分的锁状态。1 在#include以及声明之后,打开一个文件描述符:#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include & 阅读全文
摘要:
锁区域创建锁文件对于资源的排他访问,例如串口,是相当合适的,但是对于访问大的共享文件就是太好了。假如我们拥有一个由一个程序写入的大文件,但是是由许多不同的程序进行持续更新的。当一个程序正在记录一些在较长的时间内所得到的数据,并且正在为其他的一些程序进行处理时就会出现这样的情况。这些正在处理的程序并不会等待日志程序结束--他们是连续运行的--所以他们需要一些合作的方法从而可以提供对于同一个文件的同时访问。我们可以通过锁住文件的一个区域来到达这种结果,这样只是文件的某一个区域被锁住,但是其他程序可以访问程序的其他部分。这称之为文件段(file-segment),或是文件区域(file-region 阅读全文
摘要:
文件锁文件锁是多用户,多任务操作系统的重要一部分。程序经常需要共享数据,通常是通过文件,所以对于这些程序来说有一种可以建立文件控制的方法是十分重要的。这样文件就可以安全的进行更新,或者当一个程序在写入文件时,另一个程序会阻止自己试图由文件中读取。Linux有许多我们可以用于文件锁的特性。最简单的方法就是以原子方式创建文件锁的技术,从而当创建了这个锁以后可以阻止其他任何事情的发生。这样就赋予程序一种方法,从而可以创建单一的文件并且不可以被其他程序同时创建。第二种方法要更为高级;他允许程序加锁文件的一部分进行排他访问。有两种方法可以做到这种加锁方式。我们只会详细的讨论其中的一种,因为第二种方法很简 阅读全文
摘要:
Null指针与MS-DOS不同,但是类似于新版本的Windows,现代的Linux系统会小心的处理读取或是写入由null指针所指向的地址,尽管实际的行为是实现相关的。试验--访问Null指针下面我们在memory5a.c程序中试一下当我们访问一个null指针时会发生什么情况:#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main(){ char *some_memory = (char *)0; printf(“A read from null %s/n”, some_memory); 阅读全文
摘要:
Making the distribution, Part 3The author strays from Linux and then returns在前一篇文章的结尾部分,我说到因为新升级的双Celeron主板(AbitBP6)存在一个古怪的空闲时死锁的问题导致Gentoo开发停止。虽然解决问题的办法就是更换主板,但是我已经没有重新更换主板的资金了,这件事也打击了我对Linux的信心并使我决定中断Gentoo的开发并转向了FreeBSD。我需要的是一个可以正常运转的系统,而Linux在这个时候的表现并不尽如人意(一天到晚的死锁),那个当口,我觉得是好好接触接触FreeBSD的时候了,便在机 阅读全文
摘要:
Making the distribution, Part 2From Enoch to Gentoo, via minor setbacks and corporate run-insEnoch踏出的第一步我在先前的文章中告诉了大家那段和Stampede开发团队在一起的、曾经最兴旺的时光和最后为什么离开的原因(就是想离那些有低级政治目的的、想控制项目的那帮家伙远点)。因为这些爱管闲事的好事者的干涉,我才会觉得装配一个自己的Linux发行版比在那种恶劣条件下改进Stampede要简单的多。幸运的是,我离开Stampede时是带着满满当当的经验离开的,这些经验与在Stampede的工作(应该是实 阅读全文
摘要:
Making the distribution, Part 1Birth of the Gentoo Linux我和Linux现今对每一个linux爱好者来说,linux不再只是一个字面上的名称,她所呈现的一切对很多开发人员来说已经超过了他们所接触过的任何东西,linux比它们更强大、更令人着迷和称赞。当我在新墨西哥大学担任系统管理员时便与linux结下了不解之缘。那时因为我们的NT服务器运行得非常棒,我的手头上也有了很多空余的时间可以加以利用,就这样第一个linux操作系统被我安装到了一台Pentium166的主机上,接下来的不断学习和深入理解的过程使我对linux越来越着迷了......一 阅读全文
摘要:
在前面的几章中,我们涉及到了资源限制的主题。在这一章,我们将会讨论管理我们资源分配的方法,然后讨论多个用户连续处理文件的方法,最后我们来讨论Linux系统所提供的工具如何处理将普通文件的限制用作一个数据存储介质的问题。我们可以数据管理总结为如下三个方面:动态内存管理:要做些什么而Linux不允许我们做什么文件锁:协作锁,共享文件锁区域,以及避免死锁dbm数据:一个基本的,大多数Linux系统中所提供的非基于SQL数据库的函数库管理内存在所有的计算机系统中内存是稀有资源。不论有多少内存可用,看起来都会显得不足。再也不是以前那种情况了:可以寻址1M内存被认为对于所有人来说都是足够的,然而现在512 阅读全文