Chinaunix首页 | 论坛 | 博客
  • 博客访问: 372758
  • 博文数量: 73
  • 博客积分: 3574
  • 博客等级: 中校
  • 技术积分: 1503
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-26 11:17
文章分类

全部博文(73)

文章存档

2012年(14)

2011年(15)

2010年(44)

分类: IT职场

2010-08-30 21:53:27

   眨眼间已经来公司工作一个半月了,去除培训的一周以及适应环境的一周,自己在公司也已经工作整整满一个月了,接触工作这么久,不禁有些小小的感悟,也就找个机会在这唠叨几句。
   来公司前就在网上听说过这样一句话:如果你到深信服后,每三个月都没有感到进步,那就一定是需要自我反省的时候了。就像这句话所说的那样,工作真的很锻炼人,不仅锻炼一个人的技术水平也磨练人的心性,让人快速的成长。两个月前的懒散惯了的自己还在一直会担心自己会不会对工作后的忙碌生活而不适应,但现在的自己,从早忙到晚,总是有事可做,有东西可学,却还真让自己感到很大的满足感,呵呵,上一次有这样的感觉还是在考研的时候吧,总之看着目前心里状态的自己,感到很欣慰。
   好了,废话不多说,下面就罗列一下自己在最近的工作中所遇到的问题,首先声明我个人编程底子差。。。
   1)最基本的一个问题,关于全局变量的。全局变量只能在定义时进行初始化,如果此时不初始化就默认初始化为0,如果你妄想在全局变量的定义后紧跟初始化语句的话是不行的。。C语言中的基本单位是函数而不是语句,所以孤立在变量定以后的语句是得不到机会执行的。
   2)关于结构体中指针的空间分配问题,如果一个结构体的成员变量包含一个char*的指针,尤其当我们的函数返回值或者需要在函数体的外面访问这个指针的时候,就需要特别注意为这个指针所指向的结构分配空间的问题。原因很简单,如果单纯的为结构体在堆上分配空间,而将函数内部的栈空间上的一个字符串首地址赋给字符指针时,那么在这个函数外要想访问到字符串时,由于函数已经退出,栈上的变量被释放,所以仅仅保留的首地址并不能让你能够顺利访问到所需的字符串变量。而且,对于一个结构体的指针分配空间的时候,需要分配一个结构体大小的空间,然后将空间首地址赋给指针变量,这样才能正确的在结构体内保存变量。
   3)关于变量的判断问题吧,如果p为空,我经常性的写成if(!p),对这样写是没有问题,但这几天的编程过程中我却发现,我经常对需要判断p不为空的时候,也习惯性的写成if(!p),着实为自己增加了很多麻烦,所以对于目前的自己还是不要图省事,多写几个字吧,if(p == NULL)
   4)这点算是学到的一个新知识吧,虽然以前也听说过,只是没这么深入了解过,就是关于用户空间与内核空间需要数据通信的时候。
   在学生时代的自己,第一反应总是选择添加系统调用的形式去完成所需的功能,可就在我耗费一天的时间进行编码、调试(make的时间还特别的长)后,却被到时告知在公司内部一般不允许采用这样的方法,因为在不同的系统版本中系统调用号的分配可能会不同,这样自己编写的系统调用在可移植性上就差很多,而且容易留下系统隐患。
   公司内部最常用的两种方法就是a)proc文件 b)ioctl虚拟设备
   对于proc文件,这部分自己比较熟悉一下,不过在这里生成proc文件的方式不太相同,为了满足更一般性,通常采用生成porc文件项,然后直接定义其文件操作函数f_op函数列表中的read、write等函数,这个过程的实现类似于通过系统调用完成信息传递。
   而对于虚拟设备中的ioctl,大致过程是在系统中建立虚拟设备,用户空间在需要信息交换的时候,通过打开设备文件,然后根据ioctl不同的参数命令去执行不同的操作,这样有着更大的灵活性。
   比如对于一个变长的数据量来说,用ioctl的方式无疑是最好的,可以定义如下的结构体
   struct my_struct
   {
     int length;
     unsigned char text[1]; 或 unsigned char text[0];
   };
   拿用户空间往内核空间发消息为例,用户空间根据消息的长度不同,为结构体变量申请不同大小的内存地址空间,将长度写到结构体的第一个变量中,而将消息的内容放到length之后的地址空间中,通过ioctl函数控制将信息发往虚拟设备,此时消息的长度因写为总长度,长度+消息的总大小。 在内核得到命令后,首先通过copy_from_user获取一部分的消息,至少要包含首部长度字段,之后可以根据这个长度得知消息的总大小,从而分配不同的地址空间大小,因为内核空间的堆栈有限制,通过这种方式可以减少内存的浪费。
   呵呵,感觉不错的方法,以前好像见过,但没这次印象深刻,导师说这两种方式是公司程序员编程的基础。。。 看了自己还要努力的不少啊
   5)最后就是,自己由于缺少联系,编程的时候表现为思路不是很清晰,有时整个函数的流程设计都会出现问题,或者某些细节考虑不周,代码编写出来不漂亮。。。 继续努力
 
   从明天开始,在工作之余,我需要为自己定制新的目标,主要集中在C语言特性的学习,一些代码的编写尤其集中在Linux网络等方面,最后就是shell脚本,特别是awk、sed等命令的学习(自己通过函数分析了半天的文字结构,别人一条shell语句就搞定了,给我的打击的确不小)
 
   总之,自己还有很多需要提高的地方,需要再接再厉,持之以恒的努力,为了将来而奋斗!!!!
 
阅读(1071) | 评论(0) | 转发(0) |
0

上一篇:守护进程

下一篇:C语言深度剖析--第一章

给主人留下些什么吧!~~