【Linux】CD管理应用程序

看完Neil和Richard的《Linux程序设计》,根据书中的例子,自己写了一个简化版的CD管理应用程序。

主要用到了几个在书中讲到的知识点:

1.采用C/S模式,在同一机子上运行;

2.用curses作为客户端显示接口;

3.数据用MySQL存储;

4.进程间通讯使用命名管道。

写完下来总共900行左右的代码吧,断断续续不知道写了多久,感受还是挺深刻的,中途出了很多问题,也有很多地方理解不够深刻,甚至一度对自己的C++语法掌握程度产生了怀疑,哎,的确要去补一补Primer了。


应用程序与书上的例程有挺大出入的,全程基本没有照书看。

1.CD保存的信息只有CD名与CD中的歌曲,歌曲也只保存歌曲名,一个CD中能有多个歌曲;

2.客户端负责做人机接口,发送和接受数据包,与服务端通讯;

其功能有增加CD,修改CD(即修改CD中的歌曲),列出所有的CD和曲目,删除CD,找CD。

3.服务端负责接受和处理客户端发来的数据包,处理后发回给客户端,数据的存储和查找通过MySQL处理。

MySQL的处理命令可以参考另一篇博文,还是很方便的,比Linux自带的数据库好用多了。

CDrecord库里有两个表分别是CDs和tracks

结构如下:


4.客户端与服务端的通讯使用管道,

管道发送的struct结构如下:

struct data_package
{
	pid_t pid_client;
	char data[MAX_STRING];
	cmd_list cmd;
	int res;
};
其中cmd_list定义了客户端需要执行何种命令:
typedef enum {
	add_CD = 0,
	get_CDname,
	find_CD,
	remove_CD,
	update_CD,
	count_CD,
	add_TRACKS,
	get_CDnum,
} cmd_list;
客户端都发送到同一个管道给服务端
而服务端根据根据客户端不同的pid将处理后的信息返回到客户端
int send (cmd_list send_cmd, char* send_string, pid_t send_pid, int send_res)
{
	data_package data_to_send;
	data_to_send.pid_client = send_pid;
	sprintf (data_to_send.data, "%s", send_string);
	data_to_send.cmd = send_cmd;
	data_to_send.res = send_res;

	//open the pipe
	char *pipe_name = new char[MAX_STRING];
	sprintf (pipe_name, CLIENT_FIFO_NAME, send_pid);
	if ((client_fd = open (pipe_name, O_RDWR)) == -1)
		printf ("client fifo %d open failed\n", (int) send_pid);

	//send the data
	write (client_fd, &data_to_send, sizeof (data_to_send));

	//close the pipe
	close (client_fd);
	return 0;
}

整个程序写下来,几个要注意的地方:

1. 还是C风格的字符串问题,包括申请空间,string的转换,取子串,参数传递等等问题,在写之前没想到自己在这方面这么抓急,不过也算是搞懂了。

这里还有一个问题,就是如果在struct里面成员有string类的话,传递是会发生core dump的,好像是因为Linux里面默认的是使用C编译器导致的。

2.第一次写C/S应用程序,从架构到每一个细节都是自己决定自己想,先确定好接口真的很重要。


把代码放在CSDN上了,有兴趣欢迎下载

https://code.csdn.net/d521000121/cdrecord/releases/tag/1.0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 第1部分 API函数调用 实例1 使用动态链接库扩展PowerBuilder 实例2 任务状态区图标的创建 实例3 使用API 函数的磁盘卷标 实例4 透明图像的绘制 实例5 用PowerBuilder实现拨号 实例6 无标题栏窗口的拖动 实例7 PowerBuilder加载控制面板应用程序 实例8 PowerBuilder打开Windows标准对话框 实例9 Power Builder实现位图菜单 第2部分 用户界面设计 实例10 PowerBuilder的日期录入 实例11 在 PowerBuilder窗体中使用ActiveX控件 实例12 阴历日期转换实现 实例13 渐变的Splash窗体实现 实例14 XP风格的按钮实现 实例15 拾色器的实现 实例16 XP风格的进度条 实例17 位图按钮 实例18 文件操作 实例19 MSN风格消息框 实例20 Microsoft Agent 控件使用 实例21 渐变色类的实现 实例22 抓图工具的实现 实例23 MP3播放器的实现 实例24 AVI播放器的实现 实例25 CD播放器的实现 实例26 透明窗口的实现 实例27 状态栏的使用 实例28 日期时间控件使用 实例29 使用ActiveBar创建用户界面 实例30 OutlookBar 界面实现 实例31 界面设计综合举例 第3部分 辅助程序功能设计 实例32 使用API函数实现辅助功能 实例33 CRC校验码的使用 实例34 输入法的枚举 实例35 人民币大小写金额的转换 实例36 数据的压缩和解压缩 实例37 图像扫描实现 实例38 Flash动画的应用 实例39 键盘模拟器的实现 实例40 AresButtonPro控件的使用 第4部分 网络和通信开发 实例41 局域网短消息的发送 实例42 Ping的实现 实例43 FTP客户端的实现 实例44 FAX的发送 实例45 PowerTCP 控件的使用 实例46 使用Windows API实现串行通信 实例47 PowerBuilder实现的邮件发送和接收 实例48 INet对象和WebBrowser控件的使用 实例49 使用MediaPlayer和RealPlayerG2播放流媒体 第5部分 数据窗口 实例50 数据库排序 实例51 数据库与图像的存取 实例52 数据库下拉树控件的实现 实例53 数据窗口导入到Excel表中 实例54 人民币声音拼写检查 实例55 数据窗口中回车键的处理 实例56 使用模板实现数据窗口输出到word文档 实例57 PSR浏览器的实现 实例58 使用PowerBuilder实现ODBC的自动配置 实例59 条形码在PowerBuilder中的应用 实例60 在PowerBuilder中使用数据管道 实例61 数据窗口与图表处理 实例62 实现数据窗口输出到HTML网页中 实例63 游标的使用 实例64 动态创建数据窗口 实例65 数据窗口间的数据传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值