《Linux程序设计》初学感受,少量bug未能解决

来源:互联网 发布:javascript调用数据库 编辑:程序博客网 时间:2024/05/23 15:07

前言

上一篇日志其实应该上个星期写的,所以今天一次更新两篇了。

按照自己定下来的学习计划,现在应该开始学习《Linux程序》设计了。


这一周的速度不算快,学完了前五章,173页的内容而已,我对于Shell Scripts的看法改改观了很多,并且对于C语言的认识真真正正的提升了不少。


先来说Shell Scripts吧,


前2篇文章说到这个脚本语言的时候我还觉得这个语言太烂了,怎么让人觉得语法上有这么多的歧义呢,现在想想,当时还真的是对于shell了解太少,以至于管中窥豹,产生了偏见。之前最讨厌的一点就是[ ]作为判断条件的时候,括号中的参数全部要用空格隔开,重新学习了shell之后,才知道这个符号原来的想法就是代替test命令,所以实现上带有了test命令的特征,命令的每个参数就必须要用空格分开了,而且test命令中的参数全部可以直接搬来使用。这样想来确实方便了不少。而shell中的变量默认是字符串的格式,使用eval命令,shell会主动解释字符串的意义。并且在学习的过程中,新学到的set命令对于编写的脚本程序的帮助特别大,发现写脚本程序变得容易的多了。不过Shell中还是有不少不太明白的例子,先记录下来在这里,希望以后回头再来看的时候能够明白这是什么样的原因。

《Linux程序设计》 P51  信号处理脚本程序:

trap 'rm -f /tmp/my_tmp_file_$$ ' INT

这个脚本程序做的事情就是用户使用Ctrl+C时,删除该进程创立的临时文件。上一句话中的$$意图是返回改进程的PID。

然而,之前的学习中,单引号中的$是不会变成他代表的值的。所以按照我最初的理解,应该是删除了 my_tmp_file_$$这个文件。但是当我运行调试这个程序的时候,却发现删除的文件是用PID对应的。

我尝试删除了括起来命令的单引号,结果当然是语法错误,因为Shell无法识别这段话,然后我把单引号改成了双引号,结果还是可用,我想大概是这个命令的内部处理方法与外面的封装无关吧,只要成功把命令的内容传递过去,外部的单引号双引号都会被忽略。


接下来:

trap INT
源码的目的是想让程序忽略掉INT中断,不过这样的语句违反了trap命令的格式。运行到这里时报错。我在中间加了一个空命令 : 解决了这个问题。


之后学习了dialog工具,发现这原来是用来生成图形界面的命令,想起里了之前编写mfc程序时里的dialog,原来这些东西都是一脉相通的啊大笑,所以更加的感受到,如果早一点接触这些东西就好啦。


之后第三章,开始正式的C编程了。这里学到了底层文件访问,read与write函数,读取的是是int值,文件流的表示也是nt值0,1,2这下就全部连上了。实际上,我之前的编程生涯里,一直跟着学校的培养计划走,连ANSI C的标准都不知道,学到了这里,才明白了标准的I/O库使用的fopen fclose函数。 并且明白了之前常常听见的文件流原来就是FILE*的值。并且stdin stdout,stderr也都是FILE*的值。使用fileno()便可以转换文标识文件的fildes的int值。


并且printf的输出对象也终于明白了 ,现在也更愿意使用fprinttf函数,毕竟输入的目标变成了文件流,更容易控制。


扫描目录部分遇到了一个挺严重的bug:

P104  一个目录扫描程序

if(S_ISDIR(statbuf.st_mode))
这里是使用stat结构体中的st_mode成员来判断该文件名是否是一个目录。结果在我的电脑中运行的结果是出现了判断错误,把一些本来是目录的文件夹判定成了文件。因为这一部分太底层,还没能弄明白,只能先跳过去接着学习。


第四章 Linux环境


这一部分的学习感觉也是收获特别的大,第一个函数就是getopt,这个函数可以直接帮助程序去掉 -参数 之前的- 符号,就好像shell编程里的set命令一样。


日志信息这一部分我也觉得特别有用,有了这个syslog函数之后,可以在代码中人为的设置断点,把这里的值写入系统messaages文件中。不过可惜的是,由于是新的系统,我自己写的LOG_DEBUG信息找不到对应的文件了。。。暂时先不管,以后再来查找。


第5章 终端


这一章的内容基本是都是控制shell里的终端的,对终端进行读写, 使用/dev/tty来读写,核心的思想还是把这些软硬件全部当成文件,使用文件流来读写。学到这里,我变发现Linux的这个思想确实是有很大的帮助。对于编程的统一再好不过了。 之后的termios结构,意图在于控制终端的输入输出模式,全部照着代码编写了一次之后,已经有了比较直观的认识了。此时感到已经可以对终端进行足够的控制了,已经可以做很多事情 了。


总结一下对于《Linux程序设计》学习的感受。这本书的内容确实有些地方讲的不够详细,可能是我自己之前眼界太窄吧,反正觉得这本书一下让我对于编程的理解又深入了一步。书里的结构体的内容有些讲的太细致,我一遍记不住,需要再反复使用编写来熟悉。

总结

今天两篇博客感觉写的都挺烂的。。。或许是因为心态变了吧,现在是真的想好好深入了解软件的世界了。不再逗比了,只想记录下发生的事情,然后又由于日志拖了太久,写的不够仔细了。 

下次一定要及时的来回顾自己的学习,不然又像这次一样前面都快忘完了。

0 0