linux程序设计——CD唱片应用程序(第七章)

58 篇文章 0 订阅
57 篇文章 9 订阅

7.4 CD唱片应用程序

这篇为第七章的CD唱片应用程序,代码在 CD唱片应用程序代码下载。我们使用dbm数据库对数据存储,改进之前的CD唱片应用程序。
7.4.1 更新设计
虽然在文件中以逗号分隔变量来存储信息是一种在shell中很容易实现的方式,但是这样局限性很大,因为许多CD标题和曲目都包含逗号。可以通过使用dbm数据库来改进这种方法。
将CD资料分为标题和曲目两个部分,并用不同的文件来保存它们。
前面的实现存在一个问题,即将应用程序的数据访问部分和用户接口部分混在了一起,这与程序全实现在一个文件中有很大关系。在这个新的实现中,将用一个头文件来描述数据和用于访问它的例程,并将用户接口代码和数据处理代码分别放到两个文件中去。
虽然不能在dbm代码中使用SQL语句,但可以使用SQL术语以更正规的方式来描述新数据库。表可以用下面的代码来描述:
CREATE TABLE cdc_entry(
    catalog CHAR(30) PRIMARY KEY REFERENCES cdt_entry(catalog),
    title CHAR(70),
    type CHAR(30),
    artist CHAR(70)
);
CREATE TABLE cdt_entry(
    catalog CHAR(30) REFERENCES cdc_entry(catalog),
    track_no INTEGER,
    track_txt CHAR(70),
    PRIMARY KEY(catalog, track_no)
);
cdc_entry表中每个记录都有一个唯一的catalog列。cdt_entry表中曲目号不能为0,而且catalog和trach_no两列的组合是唯一的。
7.4.2 使用dbm数据库的CD唱片应用程序
通过使用dbm数据库存储信息的方法来重新实现应用程序。整个应用程序共有3个文件,它们是cd_data.h、app_ui.c和cd_access.c
将用户接口重写为命令行程序,本书的后面章节,使用不同的客户/服务器机制来实现应用程序,并最终将其实现为一个能够通过Web浏览器跨网络访问的应用程序。把接口转换为简单的命令行驱动接口,这样能更容易关注应用程序最重要的部分,而不是用户接口。
编写cd_data.h定义了数据的结构和用于访问这些数据的例程。
编写app_ui.c用户接口,它实现在一个单独的文件中,用它来访问数据库函数
编写cd_access.c
最后通过下面的makefile文件把所有的程序结合起来,敲入它的内容保存为Makefile文件:
all: application
INCLUDE=/usr/include/gdbm
LIBS=gdbm
#On some distributions you may need to change the above line to include the compatability library, as show belown.
#LIBS= -lgdbm_compat -lgdbm
CFLAGS=
app_ui.o: app_ui.c cd_data.h
    gcc $(CFLAGS) -c app_ui.c

access.o: access.c cd_data.h
    gcc $(CFLAGS) -I$(INCLUDE) -c access.c

application: app_ui.o access.o
    gcc $(CFLAGS) -o application app_ui.o access.o -l$(LIBS)

clean:
    rm 0f application *.o

nodbmfiles:
    rm -f *.dir *.pag
输入make,如果顺利可执行文件application将被编译并放置到当前目录中。

7.5 小结

这部分,首先学习linux内存系统的只是,虽然按需换页虚拟内存的内部实现非常复杂,但它的使用非常简单。学习它是如何保护操作系统和其他进程免受非法内存访问的侵害。
其次,这章介绍文件锁定功能是如何允许多个程序在访问数据时协调工作的。首先是简单的二进制信号量机制,然后是共享锁和独占锁来锁住同一个文件的不同部分。
然后文章介绍了dbm数据库,它具有使用一个非常灵活的索引布局来存储和高效地检索任意数据块的能力。
最后用dbm数据库为数据存储技术重新设计并实现了CD唱片应用程序。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,那么你需要完成一个Linux/Unix Shell编程的大作业,这是一个非常有趣的任务。下面是一些可能的项目想法: 1. 实现一个简单的 Shell:创建一个简单的 Shell,它可以执行基本的命令,例如 cd,ls,pwd,echo等。你可以使用 C 语言来实现它。 2. 批量文件重命名:编写一个脚本,可以批量更改文件名。例如,将所有文件名以“old_”开头的文件更改为以“new_”开头的文件。 3. 自动备份脚本:编写一个脚本,可以定期备份指定目录中的文件。你可以使用 tar 命令来完成压缩和解压缩任务。 4. 系统监控工具:编写一个 Shell 脚本,可以监控系统资源使用情况。例如,你可以通过查看系统日志文件,检查 CPU 和内存使用情况,以及查看网络流量。 5. 进程管理工具:编写一个 Shell 脚本,可以管理系统中的进程。例如,你可以通过脚本来启动、停止或重启进程,或者查看进程的状态等。 6. 网络脚本:编写一个脚本,可以执行网络操作。例如,你可以编写一个脚本来扫描网络,查找开放的端口,或者测试网络带宽等。 7. 日志分析工具:编写一个 Shell 脚本,可以分析系统日志文件。例如,你可以编写一个脚本来查找错误,或者收集统计信息。 8. 系统安全工具:编写一个 Shell 脚本,可以检查系统安全性。例如,你可以编写一个脚本来查找漏洞,或者测试系统的防火墙规则等。 以上是一些可能的项目想法,你可以根据自己的兴趣和能力来选择。无论你选择哪个项目,都需要仔细研究相关技术,并且在实现过程中保持耐心和毅力。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值